Агрегатный конвейер Mongodb для сопоставления имени поля эталонной модели вложенного документа в коллекции - PullRequest
1 голос
/ 23 апреля 2020

У меня есть две коллекции: одна - Продукт, другая - Магазины.

prouduct1 = {
name: "chair",
code: 034,
};

product2 = {
name: "table",
code: 035,
};

. При вводе материала модель Магазина обновляется с использованием следующей схемы

goodsReceipt = {

invoicenumber: 2,
products: [
    { product: "ObjectId(product1)", qty: 15 },
    { product: "ObjectId(product2)", qty: 20 },    
 ],

};

* 1008. * Теперь я хотел бы go пройти через весь реестр магазина и соответствующий идентификатор продукта 1, а затем узнать сумму всего его количества.

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете использовать ниже агрегации

import mongoose from "mongoose";

db.stores.aggregate([
  { $match: { "products.product": mongoose.Types.ObjectId(productId) }},
  { $unwind: "$products" },
  { $match: { "products.product": mongoose.Types.ObjectId(productId) }},
  { $group: {
    _id: null,
    qty: { $sum: "$products.qty" }
  }}
])
...