[英]Mongoose, check if value exists in an array of objects
我有一個集合:我想使用$in
運算符
Person = {
name: String,
members: [ {id: String, email: String}... {}]
}
到目前為止我用這個:
Person.find({members: {"$in": [id1]}})
但我已經知道這個缺陷:如果成員數組類似於Members: [id1, id2, ... id3]
,那么該方法就可以工作。 但它是一個對象數組。 那么我該如何解決呢?
您可以通過以下方式使用 elem 匹配:
db.collection.find({
arrayfield: {
$elemMatch: {
id: ObjectId("5eaaeedd00101108e1123461")
}
}
})
可以通過以下方式在 mongoose 中完成相同的操作:
query.elemMatch('arrayfield', { id: ObjectId("5eaaeedd00101108e1123461") })
.
query.where('arrayfield').elemMatch({ id: ObjectId("5eaaeedd00101108e1123461") })
.
query.elemMatch('arrayfield', function (elem) {
elem.where('id').equals(ObjectId("5eaaeedd00101108e1123461"));
})
.
query.where('arrayfield').elemMatch(function (elem) {
elem.where({ id: ObjectId("5eaaeedd00101108e1123461") });
})
我使用了這個示例集合:
[
{
"_id": ObjectId("5eaaeedd00101108e1123451"),
"arrayfield": [
{
id: ObjectId("5eaaeedd00101108e1123461"),
name: "David"
},
{
id: ObjectId("5eaaeedd00101108e1123462"),
name: "Brown"
}
]
},
{
"_id": ObjectId("5eaaeedd00101108e1123452"),
"arrayfield": [
{
id: ObjectId("5eaaeedd00101108e1123471"),
name: "Maple"
},
{
id: ObjectId("5eaaeedd00101108e1123472"),
name: "Green"
}
]
},
{
"_id": ObjectId("5eaaeedd00101108e1123453"),
"arrayfield": [
{
id: ObjectId("5eaaeedd00101108e1123461"),
name: "David"
},
{
id: ObjectId("5eaaeedd00101108e1123482"),
name: "Lacey"
}
]
}
]
想嘗試直播? 使用此鏈接在 mongo 游樂場上嘗試https://mongoplayground.net/p/H3fdmp9HkQv
您可以在查詢中使用members.id
作為字段來匹配您的子文檔id
s :
Person.find({ "members.id": { "$in": ["id1"] } })
您可以使用 MongoDB $elemMatch 運算符來匹配嵌套數組包含至少一個與指定條件匹配的元素的文檔。 在您的情況下,您可以使用它來查找成員數組包含具有指定 ID 的 object 的文檔。 這是一個例子:
Person.find({ "members": { "$elemMatch": { "id": id1 } } });
這將返回成員數組包含 object 且 id 等於 id1 的所有文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.