mongodb,如何在数组中查找其他数组

时间:2016-02-08 02:07:58

标签: arrays mongodb mongodb-query

我需要一些帮助。我试图在另一个数组中找到一个数组。

记录:

{
    "_id" : ObjectId("56b7e6966213e8d142ef55b7"),
    "users" : [ 
        ObjectId("56b0e547a838b5a45b4d0100"), // 0
        ObjectId("56a7e16e37e5adf32b97cc3d")  // 1
    ]
},
{
    "_id" : ObjectId("56b7e6966213e8d142ef55b7"),
    "users" : [ 
        ObjectId("56b0e547a838b5a45b4d0100"), 
        ObjectId("56a7e16e37e5adf32b97cc3d"),
        ObjectId("56b7e6b96213e8d142ef55b8")
    ]
}

我正在尝试只查找第一条记录"_id" : ObjectId("56b7e6966213e8d142ef55b7")

我正在使用查询:

db.collection.find({"users" : { $in: [ 
    ObjectId("56b0e547a838b5a45b4d0100"), 
    ObjectId("56a7e16e37e5adf32b97cc3d")
]}})

db.collection.find({ $and: [{
    "users": ObjectId("56b0e547a838b5a45b4d0100")
}, {
    "users": ObjectId("56a7e16e37e5adf32b97cc3d")
}]})

回复给了我两条记录。

此请求给出了正确答案:

db.collection.find({"users" : [ 
    ObjectId("56b0e547a838b5a45b4d0100"), // 0
    ObjectId("56a7e16e37e5adf32b97cc3d")  // 1
]})

但是如果记录有这样的数组:

{
    "_id" : ObjectId("56b7e6966213e8d142ef55b7"),
    "users" : [ 
        ObjectId("56a7e16e37e5adf32b97cc3d"), // 1
        ObjectId("56b0e547a838b5a45b4d0100")  // 0
    ]
}

它不起作用

$ all,$ eq,$ in也不起作用

db.rooms.find({  
    users: {
        $all: [ 
        ObjectId("56a7e16e37e5adf32b97cc3d"), 
        ObjectId("56b0e547a838b5a45b4d0100")
        ]
    } 
})

我需要找到[1,2] == [1,2]或[1,2] == [2,1]

的行

不在[1,2,3] == [1,2]

的位置

如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果你所期望的是结果文件只有"只有"这两个数组条目,然后您想要的条件组合是$all$size

db.rooms.find({
    "users": {
        "$all": [
                ObjectId("56b0e547a838b5a45b4d0100"),
                ObjectId("56a7e16e37e5adf32b97cc3d") 
        ],
        "$size": 2
    }
})

$all基本上是$and,语法较短,$size区域自列表为n条目,那么您只想匹配某些内容特定的长度/尺寸。

这比直接指定数组更好,因为它将以任何顺序匹配,而不是考虑到顺序不同而不匹配的此语句,因此不是" exact"匹配:

db.rooms.find({
    "users": [
        ObjectId("56a7e16e37e5adf32b97cc3d"),
        ObjectId("56b0e547a838b5a45b4d0100")
    ]
})

逻辑上,数组包含" all"指定的条目,并且是相同的"大小"作为输入并没有什么不同。