针对空总体的Mongoose查询

针对空总体的Mongoose查询,mongoose,mongoose-populate,Mongoose,Mongoose Populate,我有这两种型号,产品和设计。产品有一个接受设计对象ID的设计字段 但有时,当保存到mlab db时,设计并没有完成保存,但仍然会返回一个ObjectId以保存到产品,所以对于某些产品,当我查询时 Product.find({...}); 我得到了Product.design=someObjectId 但当我填充时: Product.find({...}).populate('design'); 结果product.design为null,这是有意义的。现在我需要把它补上。我一直在对所有产品进

我有这两种型号,产品和设计。产品有一个接受设计对象ID的设计字段

但有时,当保存到mlab db时,设计并没有完成保存,但仍然会返回一个ObjectId以保存到产品,所以对于某些产品,当我查询时

Product.find({...});
我得到了Product.design=someObjectId

但当我填充时:

Product.find({...}).populate('design');
结果product.design为null,这是有意义的。现在我需要把它补上。我一直在对所有产品进行查询,填充“design”,然后遍历每个产品,查看其产品设计===null,但由于数据库中有超过50K个产品文档,我更愿意编写更具体的查询,因此:


我需要运行什么查询才能仅返回设计字段填充为空的产品?

您是否希望执行类似操作

Product.find(design : { exists : false }).exec(function(err,doc){
  if (err) throw err;
  //this will be docs with design set to null
  console.log(doc)
})

更新:让我知道,如果这是你需要的

不!设计字段已经用ObjectId填充,它只是没有链接到现有文档。运行Product.find({design:})返回[],但仍然没有返回。这样想:当我运行Product.find({…})时,受影响的产品看起来是这样的:{创建:2016-03-23T23:07:19.759Z,设计:5660effabb790c22059a4114}但是当我运行Product.find({…}).填充('design')时,我返回:{创建:2016-03-23T23:07:19.759Z,design:null}因为没有使用该ObjectId的设计。但是在最初的查询中,产品仍然有一个设计字段。因此,检查{$exists:false,$ne:}不起作用。是否有任何原因使您无法尝试填充所有文档,然后运行第二个查询以查看哪些文档的设计字段为null,然后从中进行更新?我想不出更好的处理方法,但其他人可能会有更好的解决方案。正如我在上面所评论的,这就是我一直在做的,我只是希望有更好的方法,因为我的数据库中有超过5万个产品&不知道潜在问题是否得到解决。我遇到过同样的问题。你有没有找到解决办法@罗宾