Mongodb 如何编写一个Mongoose find查询,该查询使用另一个字段作为它';有条件吗?

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模式的模式中,每个人都有两个字段:“children”和“maximum_children”。这两个字段的类型都是Number

我想写一个find查询,当Persons的“children”值小于它的“maximum_children”值时返回Persons

我试过:

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
});