我有一个集合:我想使用$in
运算符
Person = {
name: String,
members: [ {id: String, email: String}... {}]
}
到目前为止,我使用的是:
Person.find({members: {"$in": [id1]}})
但我已经知道了缺陷:如果成员数组像成员:[id1,id2,... id3]
这样,那么该方法将奏效。但它是一个对象数组。那么我该如何解决呢?
我有一个集合:我想使用$in
运算符
Person = {
name: String,
members: [ {id: String, email: String}... {}]
}
到目前为止,我使用的是:
Person.find({members: {"$in": [id1]}})
但我已经知道了缺陷:如果成员数组像成员:[id1,id2,... id3]
这样,那么该方法将奏效。但它是一个对象数组。那么我该如何解决呢?
members.id
作为字段,以匹配您的子文档id
:Person.find({ "members.id": { "$in": ["id1"] } })
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