[英]How to find values in an array that matches with other arrays value in 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.