我使用mongoose填充数据列表,如:
Account.findOne({_id:accountId}).populate({
path:"orders.order",
match:{_id:orderId},
selecte:'',
options:{
limit:1
}
}).exec(function (err, doc) {
if (err) {
callback(err);
}
callback(doc);
})
}
我得到了什么:
[ { order: null },
{ order: null },
{ order: null },
{ order: null },
{ order: null },
{ order: null },
{ order:
{ date: Tue May 31 2016 12:56:36 GMT+0800 (HKT),
dishs: [Object],
__v: 0,
message: 'plz deliver after 5 p.m',
price: 5,
address: [Object],
shop: null,
user: 574bfebc29cf722c17f8eafe,
_id: 574d198451615ce01a5e1a81 } } ]
我认为这个数据是一个数组,但是
console.log(typeof doc.orders);//object
console.log(doc.orders.length);//undefined
console.log(doc.orders[0].order);//error
console.log(Array.isArray(doc.orders));//false
我不知道如何删除此数据的空值以及如何将此数据更改为数组?
顺便说一下,我发现gist中的帖子说mongoose populate.match如果不符合条件会返回null值,是真的吗?
答案 0 :(得分:0)
我错误地认为我以错误的方式定义了架构。
错误的架构:
orders:{order: [{type: mongoose.Schema.Types.ObjectId, ref:'Order'}] }
在数组中定义架构的正确方法,你要填充什么:
orders:{type:[{
order:{type: mongoose.Schema.Types.ObjectId, ref:'Order'}
}]}
在此之后,使用populate.match将为您提供一个合法的数组,您可以像普通数组一样使用它。