如何在 Express js 中执行多个填充?
How to execute multiple populate in Express js?
我正在尝试执行多个填充,到目前为止,只有最后一个填充在执行。
这是我的代码,
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,我会得到一个价格。简而言之,只有最后一个填充有效
我将其作为输出
> {
> "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"
> }
> }
> ]
根据 Mongoose 文档,如果您使用同一路径多次调用 populate() ,则只有最后一次生效。
如果您使用的是 mongoose v3,我相信下面的代码应该适合您。
Order.find()
.select("product quantity _id")
.populate('product', 'name price productImage')
.exec()
.then(docs => {
.....
.....
})
我想
Order.find()
.select("product quantity _id")
.populate('product', 'name')
.populate('product', 'price')
.populate('product','productImage')
.exec()
不起作用,因为您一次又一次地为同一个 refrence
填充单个特定字段。
发生了什么事?
- 产品填充了名称字段。
- 您再次使用价格字段填充产品并覆盖之前的文档。
- 您再次填充 productImage 字段并覆盖之前的文档。
你需要做什么?
Order.find()
.select("product quantity _id")
.populate('product', 'name price producImage')
调用单个填充 field name syntax and also see field selection。
我正在尝试执行多个填充,到目前为止,只有最后一个填充在执行。
这是我的代码,
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,我会得到一个价格。简而言之,只有最后一个填充有效
我将其作为输出
> {
> "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"
> }
> }
> ]
根据 Mongoose 文档,如果您使用同一路径多次调用 populate() ,则只有最后一次生效。
如果您使用的是 mongoose v3,我相信下面的代码应该适合您。
Order.find()
.select("product quantity _id")
.populate('product', 'name price productImage')
.exec()
.then(docs => {
.....
.....
})
我想
Order.find()
.select("product quantity _id")
.populate('product', 'name')
.populate('product', 'price')
.populate('product','productImage')
.exec()
不起作用,因为您一次又一次地为同一个 refrence
填充单个特定字段。
发生了什么事?
- 产品填充了名称字段。
- 您再次使用价格字段填充产品并覆盖之前的文档。
- 您再次填充 productImage 字段并覆盖之前的文档。
你需要做什么?
Order.find()
.select("product quantity _id")
.populate('product', 'name price producImage')
调用单个填充 field name syntax and also see field selection。