網站搜尋

node.js - MongoDb/查找 + 更新文件


你能幫我解決我的問題嗎?我有兩個文件:suppliers 和 consolidation。我需要用 suppliers 的欄位更新 consolidation 文件(consolidation.frs_codeclient 從 supplier.codeclient,consolidation.frs_price 從 supplier.price),僅當 consolidation.frs_code=supplier.code 且 consolidation.etb_code=supplier.customer_code 時。

下面是我的腳本,但它不起作用 :(

exports.build = (req, res) => {
  console.log("Build consolidation");
  Consolidation.aggregate([
    {$lookup: {
      from: 'suppliers',
      as: 'Supplier',
      let: { 
        SupplierCode: '$code',
        SupplierCustomerCode: '$customer_code',
        SupplierCodeClient: '$codeclient',
        SupplierPrice: '$price'
      },
      pipeline: [
        { $match:
          { $expr: {
            $and: [
              { $eq: ['$frs_code', '$$SupplierCode'] },
              { $eq: ['$etb_code', '$$SupplierCustomerCode'] }
            ]
          }}
        },
        { $project: { 
          frs_codeclient: "$$SupplierCodeClient", frs_price: "$$SupplierPrice"
        }}
      ]
    }}
  ])
  .then(data => {
    res.send({
      message: `${data.deletedCount} Consolidations were built successfully!`
    });
  })
  .catch(err => {
    res.status(500).send({
      message:
        err.message || "Some error occurred while building all Consolidations."
    });
  });
};

謝謝你的幫忙 :)

更新

我發現使用這個解決方案:

db.customers.aggregate([
    {$lookup: {
      from: "suppliers",
      let: { 
        customerCode: "$code",
        customerName: "$name",
        customerCodePostal: "$codepostal",
        customerCity: "$city",
        customerPrice: "$price",
        customerSupplierCode: "$supplier_code",
        customerSupplierCodeClient: "$supplier_codeclient"
      },
      pipeline: [
         { $match:
          { $expr: {
            $and: [
              { $eq: ["$customer_code", "$$customerCode"] },
              { $eq: ["$code", "$$customerSupplierCode"] }
            ]
          }}
        },
         { $project: { 
          _id: 0,
          "supplierCode": "$code",
          "supplierName": "$name",
          "supplierCodeClient": "$codeclient",
          "supplierCustomerCode": "$customer_code",
          "supplierPrice": "$price",
          "customerCode": "$$customerCode",
          "customerName": "$$customerName",
          "customerCodePostal": "$$customerCodePostal",
          "customerCity": "$$customerCity",
          "customerPrice": "$$customerPrice",
          "customerSupplierCode": "$$customerSupplierCode",
          "customerSupplierCodeClient": "$$customerSupplierCodeClient"
        }}
      ],
      as: "supplier"      
    }},
    { $project: { 
          _id: 0,
          "price": 1,
          "supplierCode": "$supplier.supplierCode",
          "supplierName": "$supplier.supplierName"
        }}
])

答案#1

我發現使用這個解決方案:

db.customers.aggregate([
    {$lookup: {
      from: "suppliers",
      let: { 
        customerCode: "$code",
        customerName: "$name",
        customerCodePostal: "$codepostal",
        customerCity: "$city",
        customerPrice: "$price",
        customerSupplierCode: "$supplier_code",
        customerSupplierCodeClient: "$supplier_codeclient"
      },
      pipeline: [
         { $match:
          { $expr: {
            $and: [
              { $eq: ["$customer_code", "$$customerCode"] },
              { $eq: ["$code", "$$customerSupplierCode"] }
            ]
          }}
        },
         { $project: { 
          _id: 0,
          "supplierCode": "$code",
          "supplierName": "$name",
          "supplierCodeClient": "$codeclient",
          "supplierCustomerCode": "$customer_code",
          "supplierPrice": "$price",
          "customerCode": "$$customerCode",
          "customerName": "$$customerName",
          "customerCodePostal": "$$customerCodePostal",
          "customerCity": "$$customerCity",
          "customerPrice": "$$customerPrice",
          "customerSupplierCode": "$$customerSupplierCode",
          "customerSupplierCodeClient": "$$customerSupplierCodeClient"
        }}
      ],
      as: "supplier"      
    }},
    { $project: { 
          _id: 0,
          "price": 1,
          "supplierCode": "$supplier.supplierCode",
          "supplierName": "$supplier.supplierName"
        }}
])