Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何使用Mongoose填充数组的数组?_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Mongodb 如何使用Mongoose填充数组的数组?

Mongodb 如何使用Mongoose填充数组的数组?,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,集装箱装卸文件 var Stuff = new mongoose.Schema({ name: String, expiration: Date, cost: Number }); var Container = new mongoose.Schema({ stuff: { type: String, ref: 'stuff' }, }); var ContainerWrapper = new mongoose.Schema({ container: [[containe

集装箱装卸文件

var Stuff = new mongoose.Schema({
  name: String,
  expiration: Date,
  cost: Number
});

var Container = new mongoose.Schema({
  stuff: { type: String, ref: 'stuff' },
});

var ContainerWrapper = new mongoose.Schema({
  container: [[container]] // array of arrays
});
我怎样才能得到这些东西的数量?我试过下面代码的变体

containerRapper.find({}).populate({path:'container.stuff'})

但似乎都没有起作用


感谢您的帮助

试试下面的这个例子,应该可以,如果不行,请在下面评论

{
  container: [
    [
      {stuff: 'ID1'},
      {stuff: 'ID2'},
    ],
    [
      {stuff: 'ID3'},
      {stuff: 'ID4'},
      {stuff: 'ID5'},
    ]
  ]
}

您不能使用常规填充,您将需要深度填充。这里有一些


你能提供一些实际数据吗?更新的问题。我已经添加了一个答案。这可能会解决您的问题。我会仔细检查,但我相信我也尝试过,但它不起作用。@linxtion使用我的解决方案时,您的“数据”中有什么?如果我删除额外的包装数组,并使用
填充('container.stuff'),我会得到一个
{[CastError:Cast to ObjectId]路径“{stuff:'SkpTCgxug'}”的值失败。
它是有效的。我可能只会使用一个数组,稍后再操作该结构。
ContainerWrapper
    .find({})
    .exec(function(err, data) {

        // get container ids
        // convert [[1, 2],['a', 'b', 'c']] into [1, 2, 'a', 'b', 'c']
        var containers = data.container.reduce(function(arr, next) {
            next.forEach(function(containerItem) {
                arr.push(containerItem);
            });
            return arr;
        }, []);

        // population options, try playin with other fields
        var options = {path: 'stuff', model: 'Contanier'};

        Container
            .populate(containers, options)
            .exec(function(containerErr, containerData) {

                // populated containers
                console.log(containerData);
            });
    });
ContainerWrapperModel
    .find()
    .lean()
    .populate({
        path: 'container',
        model: 'Container', 
        populate: {
            path: 'stuff',
            model: 'Stuff'
        }
    })
    .exec(function(err, data) {
        console.log(data);
    });