Я ссылаюсь на одно поле из одной коллекции в другую.Но всякий раз, когда есть дубликаты, возвращаемый массив отличается - PullRequest
0 голосов
/ 23 сентября 2018
router.get('/orderSelect', (req, res, next) =>{
    orderSchema.aggregate([   
        { $lookup:
            {
                from: 'productschemas',
                localField: 'orderItem.productId',
                foreignField: '_id',
                as: 'product'
            }
        }
    ], (err, orderSchema) =>{
        if(err) res.json(err);
        else res.json(orderSchema);
    });
});

productschemas:

[
  {
    "_id": "5ba26ff33318b51e20a80fb3",
    "productExist": true,
    "productName": "Oppo",
    "supplierId": "5b9f1e2f5929760568283f95",
    "brandId": "5b9d19e8316e8d2660f26394",
    "categoryId": "5b9d20de9c21fd1b78410d52",
    "productPrice": 4300,
    "productQuantity": 320,
    "productMax": 10,
    "productMin": 4,
    "productTimeStamp": "2018-09-19T15:49:07.177Z",
    "__v": 0
  }
]

orderSchema

[
  {
    "_id": "5ba79a638cef34091c143def",
    "orderItem": [
      {
        "_id": "5ba7a37b4c40dc24d8f4f403",
        "productId": "5ba26ff33318b51e20a80fb3",
        "productPrice": 4300,
        "productQuantity": 2,
        "productTotal": 8600
      },
      {
        "_id": "5ba7a37b4c40dc24d8f4f402",
        "productId": "5ba34f0c133e492a04731c49",
        "productPrice": 2000,
        "productQuantity": 1,
        "productTotal": 2000
      },
      {
        "_id": "5ba7a37b4c40dc24d8f4f401",
        "productId": "5ba26ff33318b51e20a80fb3",
        "productPrice": 4300,
        "productQuantity": 1,
        "productTotal": 4300
      }
    ]
  }
]

Я хочу сослаться из коллекции ordershemas на 'orderItem.productId' на коллекцию productschema.Я просто сохраняю идентификатор объекта и хочу отобразить на экране название продукта, а не только идентификатор.но всякий раз, когда есть дубликаты, возвращаемый массив 'product' не повторяется,

1 Ответ

0 голосов
/ 23 сентября 2018

Вам необходимо $unwind массив orderItem

orderSchema.aggregate([   
  { "$unwind": "$orderItem" },
  { "$lookup": {
    "from": 'productschemas',
    "localField": 'orderItem.productId',
    "foreignField": '_id',
    "as": 'product'
  }},
  { "$unwind": { "path": "$product", "preserveNullAndEmptyArrays": true }},
  { "$group": {
    "_id": "$_id",
    "product": { "$push": "$product" },
    "orderItem": { "$push": "$orderItem" },
    "orderClientName": { "$first": "$orderClientName" },
    "orderContact": { "$first": "$orderContact" }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...