知道为什么这个查询
{
"_id": ObjectId("4e2a4ca7f21a81331f0006c3"),
"categories": {
"$nin": [
"Arts"
]
}
}
当我们用$ nin明确排除“Arts”时,会返回以下记录吗?
{
"_id": ObjectId("4e2a4ca7f21a81331f0006c3"),
"categories": {
"0": "Arts",
"1": "Arts - Performance"
}
}
作为一个完整性检查,我将$ nin改为$ in in
{
"_id": ObjectId("4e2a4ca7f21a81331f0006c3"),
"categories": {
"$in": [
"Arts"
]
}
}
并没有按预期返回任何内容..但我仍然对上面的$ nin结果感到困惑!
答案 0 :(得分:0)
您的第一个查询是请求具有特定ID的文档,categories
的值不在字符串列表中(在本例中为["Arts"]
)。此文档的categories
值是嵌入式文档{ "0": "Arts", "1": "Arts - Performance" }
。
第二个查询不返回任何内容,因为该嵌入文档不在categories
字段的提供值列表中。
修改:如果您希望能够使用$in
和$nin
搜索类别,则应考虑将categories
子文档转换为数组:
> db.foo.save({categories: ["Arts", "Arts - Performance"]})
> db.foo.save({categories: ["Sports", "Sports - Baseball"]})
> db.foo.find({categories: {$nin: ["Arts"]}})
{ "_id" : ObjectId("4e2e3b49aed2871354b374eb"), "categories" : [ "Sports", "Sports - Baseball" ] }
> db.foo.find({categories: {$in: ["Arts"]}})
{ "_id" : ObjectId("4e2e3b1eaed2871354b374ea"), "categories" : [ "Arts", "Arts - Performance" ] }