$ ne查询不使用mongoose但在mongo shell中工作

时间:2014-01-31 16:46:06

标签: node.js mongodb mongoose

执行此mongoose查询时

FinancedProject.find({_id:{$ne:fb.financedProjects.financedProjectId}).exec( callback);

其中fb是像这样的对象

{
    _id: ObjectId("54das4da9dsa9d4ad4a9");
    name: "some",
    financedProjects: [
       {registry:"147", financedProjectId:ObjectId("13da4sd4sa48da4dsa")},
       {registry:"189", financedProjectId:ObjectId("5d5asd5a4sd5ada5sd")}
    ]
{

结果未定义,当我在mongoshell中执行时,结果是预期的

1 个答案:

答案 0 :(得分:7)

由于financedProjectsarray,您必须使用[]来处理元素:

FinancedProject.find({
    _id: {
        $ne: fb.financedProjects[0|.financedProjectId
    }
}).exec( callback );

修改

mongoose是JavaScript,所以它遵循JavaScript的规则。 fb.financedProjectsarray。因此,如果使用表达式fb.financedProjects.financedProjectId,JavaScript解释器会将其评估为undefined,因为该数组中没有financedProjectId属性(数组具有0,{{1 }},12,...作为属性)。所以mongoose确实获得了3,并且没有机会认识到你的意思是数组元素的属性{ $ne: undefined }

要实现您的目标,您可以这样做:

financedProjectId