【问题标题】:Mongoose Query for Null Population空种群的猫鼬查询
【发布时间】:2016-07-11 10:48:57
【问题描述】:

我有这两个模型,产品和设计。产品有一个采用设计 ObjectId 的设计字段。

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

Product.find({...});

我找回 Product.design = someObjectId;

但是当我填充时:

Product.find({...}).populate('design');

生成的 product.design 为 null,这是有道理的。现在我需要修补它。我一直在查询所有产品,填充“设计”,然后遍历每个产品以查看其产品设计是否 === null,但是数据库中有超过 50K 的产品文档,我更愿意写一个具体查询,所以:

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

【问题讨论】:

    标签: mongoose mongoose-populate


    【解决方案1】:

    你想做这样的事情吗?

    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({...}) 时,看起来像这样:{_id: 56902c2263b132b0976c14ad, created: 2016-03-23T23:07:19.759Z, design: 5660effabb790c22059a4114}但是当我运行 Product.find({...}).populate('design') 时,我返回:{_id: 56902c2263b132b0976c14ad, created: 2016-03-23T23:07:19.759Z, design: null} 因为有不是具有该 ObjectId 的设计。但是在最初的查询中,产品还是有设计字段的。所以检查 {$exists: false, $ne: ""} 不起作用。
    • 您是否有任何理由无法尝试填充所有文档,然后运行第二个查询以查看哪些文档的设计字段为空,然后从那里进行更新?我想不出更好的处理方式,但其他人可能有更好的解决方案。
    • 就像我上面评论的那样,这就是我一直在做的事情,我只是希望有更好的方法,因为我的数据库中有超过 50K 的产品,并且不知道潜在问题是否得到解决
    • 我也遇到了同样的问题。您是否找到任何解决方案? @罗宾
    猜你喜欢
    • 2016-07-31
    • 2019-09-13
    • 2017-06-02
    • 1970-01-01
    • 2018-02-10
    • 2013-11-27
    • 2016-12-17
    • 2018-09-13
    • 2016-07-02
    相关资源
    最近更新 更多