我正在嘗試學習 mongodb,我的資料庫如下所示:
{
"_id" : ObjectId("625c95836be34e3c73c37316"),
"cuisine" : "Chinese",
"grades" : [
{
"date" : ISODate("2014-02-25T00:00:00Z"),
"grade" : "A",
"score" : 112
},
{
"date" : ISODate("2013-08-14T00:00:00Z"),
"grade" : "C",
"score" : 28
},
{
"date" : ISODate("2012-07-18T00:00:00Z"),
"grade" : "A",
"score" : 13
},
{
"date" : ISODate("2012-03-09T00:00:00Z"),
"grade" : "A",
"score" : 13
},
{
"date" : ISODate("2011-10-27T00:00:00Z"),
"grade" : "A",
"score" : 12
},
{
"date" : ISODate("2011-05-19T00:00:00Z"),
"grade" : "A",
"score" : 13
}
],
"name" : "janette"
},
{
"_id" : ObjectId("625c95836be34e3c73c37317"),
"cuisine" : "Chinese",
"grades" : [
{
"date" : ISODate("2014-01-07T00:00:00Z"),
"grade" : "A",
"score" : 17
},
{
"date" : ISODate("2013-05-09T00:00:00Z"),
"grade" : "B",
"score" : 107
}
],
"name" : "Annie'S Kitchen"
}
每個物件都有一個擁有相同欄位的陣列。如果我嘗試:
db.restaurants.find({"grades.score":{ $gt: 80, $lt: 100 }});
它會抓住兩者,但不應該抓住。我也希望能夠檢查:
db.restaurants.find("grades.score":{$gt: 70},"grades.grade":{/^A$/} });
我只需要檢查陣列中相同位置的欄位。
我不知道如何更好地解釋它,對不起,感謝您的幫助。
uj5u.com熱心網友回復:
您可以使用$map投影輔助布爾陣列并使用$allElementsTrue或$anyElementTrue過濾它。
db.restaurants.aggregate([
{
"$match": {
$expr: {
"$allElementsTrue": {
"$map": {
"input": "$grades",
"as": "g",
"in": {
$and: [
{
$gt: [
"$$g.score",
80
]
},
{
$lt: [
"$$g.score",
100
]
}
]
}
}
}
}
}
}
])
這是您的第一個和第二個查詢的 Mongo 游樂場。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/465234.html
上一篇:過濾時貓鼬結果總是空的
