执行此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中执行时,结果是预期的
答案 0 :(得分:7)
由于financedProjects
是array
,您必须使用[]
来处理元素:
FinancedProject.find({
_id: {
$ne: fb.financedProjects[0|.financedProjectId
}
}).exec( callback );
修改强>
mongoose是JavaScript,所以它遵循JavaScript的规则。 fb.financedProjects
是array
。因此,如果使用表达式fb.financedProjects.financedProjectId
,JavaScript解释器会将其评估为undefined
,因为该数组中没有financedProjectId
属性(数组具有0
,{{1 }},1
,2
,...作为属性)。所以mongoose确实获得了3
,并且没有机会认识到你的意思是数组元素的属性{ $ne: undefined }
。
要实现您的目标,您可以这样做:
financedProjectId