node.js - 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"
}}
])
解决方案
我发现这个解决方案:
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"
}}
])
推荐阅读
- laravel - Eloquent:使用不存在的列进行查询
- r - reverse.code() 与 mutate_at()
- javafx - 如何选择单元格内的单个字符,而不是 JavaFX TableView 中的整个单元格?
- matlab - 多个 addpath 命令导致第二次调用缓慢
- angular - sweetalert_1.default 不是函数:Angular 5
- drupal - 用于 drupal 部署的 httpd.conf
- python - 当我运行我的测试套件时,我得到一个 TypeError 我无法理解为什么
- node.js - 在端口 80 上运行节点 js,而不以 root 身份运行
- javascript - 为什么双引号 PHP 回显字符串中的双斜杠注释会产生 JS 错误?
- java - Java ora-01830 日期格式图片在转换整个输入字符串之前结束 Timestamp SQL