Mongodb 与对象相比,如何从集合中获取文档?自定义过滤功能?
我有一个目标:Mongodb 与对象相比,如何从集合中获取文档?自定义过滤功能?,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个目标: { 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中,并且值相等-则此文档应位于查询结果
{
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或其他软件?也许我应该写我的自定义过滤函数 你可以试试这样的东西 查询将选择每个字段存在且等于该值的所有文档
db.collection.find({
$and: [{
$or: [{
name: {
$exists: false
}
}, {
name: "John"
}]
}, {
$or: [{
size: {
$exists: false
}
}, {
size: 10
}]
}, {
$or: [{
volume: {
$exists: false
}
}, {
volume: 20
}]
}]
})
问题是,我可以在对象和每个文档中有10个或更多字段。在这种情况下,$或条件的组合太多,也许我可以在我的js代码中以某种方式生成这个条件对象-这是一个好的解决方案吗?看起来我会有10个属性的大量组合-每个属性与其他属性中的任何一个,每个属性与其他属性中的任何两个,等等…你只需要测量性能。我不确定组合部分。如果您有10个属性,则需要10个or条件。您将获得上述所有文档,因为您需要$or作为存在和值,后面是$and,将所有or组合加在一起。尝试运行它,如果它不起作用,请发布一个sample.db.collection.find{$and:[{$or:[{a1:{$exists:false},{a1:John}},{$or:[{a2:{$exists:false},{a2:10}}…更多或更多条件]}类似这样的东西。