我正在为mongodb编写此文档。 我正在运行的查询没有显示输出,即使有 一个得分<5
的字段{
"address": {
"building": "1007",
"coord": [ -73.856077, 40.848447 ],
"street": "Morris Park Ave",
"zipcode": "10462"
},
"borough": "Bronx",
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Morris Park Bake Shop",
"restaurant_id": "30075445"
}
db.rest.find({grades : {"score":{$lt:5}}});
答案 0 :(得分:0)
您的查询未获得预期结果的原因是您没有使用正确的语法查询嵌入式文档中的字段。正确的语法是
db.rest.find({ "grades.score" : {$lt:5}})
此语法使用点符号指定要查询的嵌入式文档中字段的路径。
您使用的语法含义有些不同。它会查询包含嵌入文档的文档,该文档与查询中的文档完全匹配,而不是查找包含嵌入文档且其字段与您的搜索条件相匹配的文档。
为说明不同之处,让我们假设您在集合中也有以下文档。
{
"address": {
"building": "1007",
"coord": [ -73.856077, 40.848447 ],
"street": "Morris Park Ave",
"zipcode": "10462"
},
"borough": "Bronx",
"cuisine": "Bakery",
"grades": [
{ "score": 2 },
{ "score": 6 },
{ "score": 10 },
{ "score": 9 },
{ "score": 14 }
], “名称”:“莫里斯公园烘焙店”, “ restaurant_id”:“ 30075445” }
如果我们现在运行以下查询,它将找到第二个文档,而仅第二个文档:
db.rest.find({grades : {"score":2}})
这是因为这种类型的查询会将您指定为搜索条件的嵌入式文档转换为其BSON表示形式,然后查找与所提供文档的完全匹配项,而不是将您要查找的条件应用于具有以下内容的每个嵌入式文档一个“得分”字段。 如果使用
运行查询