Mongoose - 由populate删除的null引用?

时间:2017-05-26 15:55:33

标签: node.js mongoose mongoose-populate

我有一个问题,我无法弄清楚如何解决。我有一个Mongoose模型,其中包含一系列引用,这些引用将被填充。像这样:

new mongoose.Schema( {
    arr: [ { type: mongoose.Schema.Types.ObjectId, ref: 'Schema2' } ],
});

数组在我的应用程序的UI中表示网格,并且设计为固定长度。这个想法是让数组的字段为null,如果它们尚未设置为任何东西,即。当没有设置时,数组看起来像这样:

arr: [ null, null, null, null ]

在使用Mongoose填充生成UI时,这非常有用,直到实际设置了一个字段。例如,如果我将arr[2]设置为引用文档,则使用mongo工具按预期显示数组:

arr: [ null, null, ~ObjectID~, null ]

但是使用与之前相同的Mongoose populate删除空字段,返回数组:

arr: [ {~Object of ObjectID~} ]

这使得UI只生成预期的四个单元格。我正在使用的查询看起来有点像这样:

Model1
    .findOne({ ... })
    .populate({
        path: 'arr',
        populate: {path: 'secondPopulateInSchema2'}
    })
    .exec(function(err, doc) {
        //Generate UI grid using doc.arr
    });

同样,对于填充为null的数组,按预期(由我)工作,但是当至少一个字段具有引用时则不行。我不知道为什么,我一直在摆弄选项并试图找到一种干净的解决方法(不使用外部循环和“填充”)。任何帮助将不胜感激!

此致 霍特

1 个答案:

答案 0 :(得分:0)

(2019年),猫鼬现在支持填充同时保留nullundefined数组条目。

const options = {
  path: 'path',
  options: {
    retainNullValues: true 
  }
};

Model.findOne({...}).populate(options).exec(() => { ... });

在这里阅读:https://mongoosejs.com/docs/api.html#model_Model.populate