Mongodb 如何编写一个Mongoose find查询,该查询使用另一个字段作为它';有条件吗?
考虑以下几点: 我有一个叫“人”的猫鼬模型。在Person模式的模式中,每个人都有两个字段:“children”和“maximum_children”。这两个字段的类型都是Number 我想写一个find查询,当Persons的“children”值小于它的“maximum_children”值时返回Persons 我试过:Mongodb 如何编写一个Mongoose find查询,该查询使用另一个字段作为它';有条件吗?,mongodb,mongoose,Mongodb,Mongoose,考虑以下几点: 我有一个叫“人”的猫鼬模型。在Person模式的模式中,每个人都有两个字段:“children”和“maximum_children”。这两个字段的类型都是Number 我想写一个find查询,当Persons的“children”值小于它的“maximum_children”值时返回Persons 我试过: person_model.find({ children: { $lt: maximum_children } }, function (e
person_model.find({
children: {
$lt: maximum_children
}
}, function (error, persons) {
// DO SOMETHING ELSE
});
及
尝试指定要与“children”进行比较的字段名时出错。确定
就在我发布了这个问题之后,我找到了一个解决方案
答案似乎是:
person_model.find({
$where: "children < maximum_children"}, function (error, persons)
}, {
// DO SOMETHING ELSE
});
person\u model.find({
$where:“children
虽然看起来很凌乱,但似乎工作正常。
$where
必须对每个文档执行其JavaScript条件,因此其性能可能非常差。相反,您可以使用在$project
阶段中包含一个新字段,该阶段指示文档是否匹配,然后在此基础上进行筛选:
person\u model.aggregate([
{$项目:{
isMatch:{$lt:['$children','$maximum_children']},
文档:“$$ROOT”
}},
{$match:{isMatch:true}},
{$project:{{u id:0,doc:1}}
],函数(err,results){…});
这用于将原始文档包括为投影的doc
字段,最后的$project
用于删除添加的isMatch
字段
结果
看起来像:
{
“文件”:{
“_id”:ObjectId(“54d04591257efd80c6965ada”),
“儿童”:5,
“最大子女数”:10
}
},
{
“文件”:{
“_id”:ObjectId(“54d04591257efd80c6965add”),
“儿童”:5,
“最大子女数”:6
}
}
如果要删除添加的doc
级别的对象,可以在结果上使用数组#映射
,如下所示:
results=results.map(函数(项){return item.doc;});
这将重塑结果
,使其恢复原始形式:
{
“_id”:ObjectId(“54d04591257efd80c6965ada”),
“儿童”:5,
“最大子女数”:10
},
{
“_id”:ObjectId(“54d04591257efd80c6965add”),
“儿童”:5,
“最大子女数”:6
}
person_model.find({
$where: "children < maximum_children"}, function (error, persons)
}, {
// DO SOMETHING ELSE
});