我正在尝试执行多个填充,到目前为止,只有最后一个填充正在执行。
这是我的代码,
router.get("/", (req, res, next) => {
Order.find()
.select("product quantity _id")
.populate('product', 'name')
.populate('product', 'price')
.populate('product','productImage')
.exec()
.then(docs => {
res.status(200).json({
count: docs.length,
orders: docs.map(doc => {
return {
_id: doc._id,
product: doc.product,
productImage: doc.productImage,
name: doc.name,
price: doc.price,
quantity: doc.quantity,
request: {
type: "GET",
url: "http://localhost:3000/orders/" + doc._id
}
};
})
});
})
.catch(err => {
res.status(500).json({
error: err
});
});
});
我仅获得productImage。如果删除productImage,我会得到一个价格。简而言之,只有最后一个填充有效
我将其作为输出
> {
> "count": 2,
> "orders": [
> {
> "_id": "5ba8cb0016e76b50288e67ba",
> "product": {
> "_id": "5ba8c93916e76b50288e67b9"
> },
> "quantity": 2,
> "request": {
> "type": "GET",
> "url": "http://localhost:3000/orders/5ba8cb0016e76b50288e67ba"
> }
> },
> {
> "_id": "5baa1c5c121b9350d309ce6a",
> "product": {
> "_id": "5baa1a96d6fc025019a15287",
> "productImage": "uploads/2018-09-25T11:23:02.744ZScreenshot from 2018-08-07
> 11-27-31.png"
> },
> "quantity": 1,
> "request": {
> "type": "GET",
> "url": "http://localhost:3000/orders/5baa1c5c121b9350d309ce6a"
> }
> }
> ]
答案 0 :(得分:1)
根据Mongoose文档,如果您使用相同的路径多次调用populate(),则只有最后一个才会生效。
如果您使用的是猫鼬v3,我相信以下代码将为您工作。
Order.find()
.select("product quantity _id")
.populate('product', 'name price productImage')
.exec()
.then(docs => {
.....
.....
})
答案 1 :(得分:0)
我想
Order.find()
.select("product quantity _id")
.populate('product', 'name')
.populate('product', 'price')
.populate('product','productImage')
.exec()
不起作用,因为您一次又一次地为同一refrence
填充单个特定字段。
发生了什么事?
您需要做什么?
Order.find()
.select("product quantity _id")
.populate('product', 'name price producImage')
用field name syntax呼叫单个填充,并查看field selection。