簡體   English   中英

mongodb,如何在數組中查找其他數組

[英]mongodb, how to find in array other array

我需要協助。 我試圖在另一個數組中找到一個數組。

記錄:

{
    "_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]

如果有人可以幫助我,我將不勝感激。

如果您所期望的只是帶有“僅”這兩個數組條目的結果文檔,則所需條件的組合為$all$size

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

其中$all基本上是一個$and並且語法較短,而$size限制該列表作為n個條目,因此您只想匹配該特定長度/大小的內容。

這比直接指定數組要好,因為它會以任意順序匹配,而不是考慮到順序不同而不是“精確”匹配的以下語句:

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

因此,從邏輯上講,數組包含“所有”指定的條目,並且與輸入的“大小”相同且沒有區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM