我正在尝试获取所有文档,其中 instock 集合中至少有一个元素的仓库字段不为空。预期结果:仅丢弃最后的文档。
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "planner", instock: [ { warehouse: null, qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: null, qty: 15 }, { warehouse: null, qty: 35 } ] }
]);
Run Code Online (Sandbox Code Playgroud)
该查询丢弃 3 和 4。
db.getCollection('inventory').find({
$and: [{"instock.warehouse": {$ne: null}}, {"instock.warehouse": {$exists: true}}]
})
Run Code Online (Sandbox Code Playgroud)
这个返回所有元素
db.getCollection('inventory').find({
"instock": {$elemMatch: {"warehouse": {$ne: null}, "warehouse": {$exists: true}}}
})
Run Code Online (Sandbox Code Playgroud)
使用下面的查找查询。
$elemMatch请注意&的使用,$ne它比较数组的所有元素,即包括 instock 数组在仓库字段中至少没有一个空值的所有文档。
db.inventory.find({"instock":{"$elemMatch":{"warehouse":{"$ne":null}}}})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |