使用在以下位置找到的示例:
https://docs.mongodb.com/manual/tutorial/query-array-of-documents/
有:
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
后来查询:
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
在" instock"中返回一组仓库= A和qty = 5的文件。子文档
但仅查询包含{仓库:" A"}的人不会返回任何结果
db.inventory.find( { "instock": { warehouse: "A" } } )
现在,将其更改为:
db.inventory.find( { "instock.warehouse": "A" })
解决了
不应该都是一样的吗? 有关语义的一切吗?
另一方面,找到另一个子文档列表(嵌入式嵌入式) 中的子文档列表中的字段值的正确方法是什么
谢谢!
答案 0 :(得分:1)
点击查询时:
db.inventory.find( { "instock": { warehouse: "A" } } )
它会检查instock
数组下面只有一个字段的文档。在这种情况下,它就像$eq
检查一样。这就是为什么你的结果为零。
另一方面,您有warehouse: "A"
& qty: 5
存在。
这就是你的第二个问题:
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
返回结果。
第三个查询:
db.inventory.find( { "instock.warehouse": "A" })
是访问嵌入式文档中字段的正确方法。
而不是这个查询:
db.inventory.find( { "instock": { warehouse: "A" } } )
您还可以使用$elemMatch
访问文档数组中的字段。
db.inventory.find({ "instock": {$elemMatch:{warehouse: "A"} }})