mongodb - 使用索引查询 Mongo 数组
问题描述
有人可以解释这种行为吗?
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: null }, { 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 } ] }
]);
复制自https://docs.mongodb.com/v4.2/tutorial/query-array-of-documents/
但第一项instock.0.qty
被替换为null
.
因此,这个查询会产生奇怪的结果:
> db.inventory.find({"instock.0.qty": null})
{ "_id" : ObjectId("6194329212c7421dbaaeac81"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : null }, { "warehouse" : "C", "qty" : 15 } ] }
{ "_id" : ObjectId("6194329212c7421dbaaeac82"), "item" : "notebook", "instock" : [ { "warehouse" : "C", "qty" : 5 } ] }
{ "_id" : ObjectId("6194329212c7421dbaaeac83"), "item" : "paper", "instock" : [ { "warehouse" : "A", "qty" : 60 }, { "warehouse" : "B", "qty" : 15 } ] }
{ "_id" : ObjectId("6194329212c7421dbaaeac84"), "item" : "planner", "instock" : [ { "warehouse" : "A", "qty" : 40 }, { "warehouse" : "B", "qty" : 5 } ] }
{ "_id" : ObjectId("6194329212c7421dbaaeac85"), "item" : "postcard", "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] }
编辑:我只期待一个结果,但他们都回来了。
解决方案
此 Jira 票证中报告了一个类似问题:Incorrect filter result when using an null match inside an indexed array field。
提议的建议$type
用于检查为空的值。
db.collection.find({
"instock.0.qty": {
$type: "null"
}
})
推荐阅读
- go - 使用 WaitGroup 测试竞争条件时出现意外行为
- javascript - 在所有元素 jquery 数据表上方显示弹出框
- javascript - 为什么 javascript 静态变量在不创建至少一个实例的情况下无法访问(使用类名)?
- neural-network - 我应该在使用神经网络训练期间改变偏差吗?
- recursion - 如果存在解决方案,迷宫问题的复杂性(应用回溯算法)
- javascript - 如何添加/附加轮播选择以订购谷歌上的动作预览?
- parameters - AWS Lambda:参数验证失败
- java - AES在java中解密文本,在C#中加密
- python - 我应该为每个文件上传请求创建一个新的 boto3 客户端实例,还是使用共享实例
- django - 为什么 Django 中的 set_language url 不会改变语言?