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);
});