我有一个集合:我想使用 $in
运算符
Person = {
name: String,
members: [ {id: String, email: String}... {}]
}
到目前为止我用这个:
Person.find({members: {"$in": [id1]}})
但是我已经知道了这个缺陷:如果成员数组像Members: [id1, id2, ... id3]
那样,该方法就可以了。但它是一组对象。那我该如何解决呢?
答案 0 :(得分:6)
$elemMatch
可与Arrays of Embedded Documents一起使用:
在您的情况下,您可以尝试:
Person.find({
members: {
$elemMatch: { id: id1 }
}
});
但是因为它是Single Query Condition:
Person.find({
"members.id": id1
});
会做的伎俩。
答案 1 :(得分:1)
您可以通过以下方式使用元素匹配:
db.collection.find({
arrayfield: {
$elemMatch: {
id: ObjectId("5eaaeedd00101108e1123461")
}
}
})
可以通过以下方式在猫鼬中完成同样的操作:
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
答案 2 :(得分:0)
您可以在查询中使用members.id
字段来匹配您的子文档id
:
Person.find({ "members.id": { "$in": ["id1"] } })