首页 > 解决方案 > MongoDb / 查找 + 更新文档

问题描述

你能帮我解决我的问题吗?我有 2 个文件:供应商和合并。我需要使用供应商字段更新合并文档(consolidation.frs_codeclient 来自供应商.codeclient 和consolidation.frs_price 来自供应商.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"
        }}
])

标签: node.jsmongodbtypescriptmongoose

解决方案


我发现这个解决方案:

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"
        }}
])

推荐阅读