我有一个对象:
{
name: "John",
size: 10,
volume: 20
}
收集文件:
[{
id:1,
name: "Sara",
size: 10
},
{
id:2,
volume: 20
},
{
id:3,
name: "John",
size: 10
},
{
id:4,
size: 20
}]
现在我需要使用object过滤我的集合 - 如果每个文档中的每个字段(除了id)都存在于object中并且值相等 - 那么这个文档应该在查询结果中:
[{
id:1, //!EXCLUDE - name not Sara
name: "Sara",
size: 10
},
{
id:2, //OK - volume matches volume in object - return document in results
volume: 20
},
{
id:3, //OK - name and size matches object - return in results
name: "John",
size: 10
},
{
id:4, //!EXCLUDE - size don't match size on object
size: 20
}]
所以最后的回答是:
[{
id:2, //OK - volume matches volume in object - return document in results
volume: 20
},
{
id:3, //OK - name and size matches object - return in results
name: "John",
size: 10
}]
我怎么能用mongo find或其他人来做?也许我应该编写自定义过滤功能?
答案 0 :(得分:1)
你可以尝试这样的事情。
查询将选择所有文档,其中每个字段存在且等于该值。
db.collection.find({
$and: [{
$or: [{
name: {
$exists: false
}
}, {
name: "John"
}]
}, {
$or: [{
size: {
$exists: false
}
}, {
size: 10
}]
}, {
$or: [{
volume: {
$exists: false
}
}, {
volume: 20
}]
}]
})