我目前正在嘗試創建一個臨時欄位,將三個欄位加在一起,然后根據用戶輸入的值進行查詢(他們只看到計算出來的值并需要它匹配)
我最大的問題是讓投影按我的需要作業。我的欄位布局如下所示:
{
_id: ObjectId(),
userId: "",
orderNumber: "",
items: [
{
_id: ObjectId(),
rateInfo: {
baseRate: 100,
tolls: 50,
fees: 25,
},
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 200,
tolls: 25,
fees: 10,
},
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 25,
tolls: 5,
fees: 0,
},
},
],
}
我需要能夠在 rateInfo 中添加所有三個欄位并將它們顯示在每個專案陣列中,如下所示:
{
_id: ObjectId(),
userId: "",
orderNumber: "",
items: [
{
_id: ObjectId(),
rateInfo: {
baseRate: 100,
tolls: 50,
fees: 25,
},
rateTotal: 175,
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 200,
tolls: 25,
fees: 10,
},
rateTotal: 235,
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 25,
tolls: 5,
fees: 0,
},
rateTotal: 30,
},
],
}
我嘗試了以下片段,但似乎都不適合我:


$reduce 方法對 items 陣列中的所有內容求和,然后將總計放在訂單級別,如下所示:
{
rateTotal: 440
document: {
_id: ObjectId(),
userId: "",
orderNumber: "",
items: [
{
_id: ObjectId(),
rateInfo: {
baseRate: 100,
tolls: 50,
fees: 25,
},
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 200,
tolls: 25,
fees: 10,
},
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 25,
tolls: 5,
fees: 0,
},
},
],
}
}
$unwind 方法僅將第一條記錄相加,如下所示:
{
rateTotal: 175
document: {
_id: ObjectId(),
userId: "",
orderNumber: "",
items: [
{
_id: ObjectId(),
rateInfo: {
baseRate: 100,
tolls: 50,
fees: 25,
},
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 200,
tolls: 25,
fees: 10,
},
},
{
_id: ObjectId(),
rateInfo: {
baseRate: 25,
tolls: 5,
fees: 0,
},
},
],
}
}
如果有人可以澄清我做錯了什么以及如何糾正,將不勝感激。
注意:mongoose virtuals 是不可能的,因為我需要查詢它。我無法回填貓鼬模式中的計算欄位(使用自定義設定器或預保存)。
uj5u.com熱心網友回復:
您可以使用$map映射到您想要的結構。
db.collection.aggregate([
{
"$addFields": {
"items": {
"$map": {
"input": "$items",
"as": "i",
"in": {
_id: "$$i._id",
rateInfo: {
baseRate: "$$i.rateInfo.baseRate",
tolls: "$$i.rateInfo.tolls",
fees: "$$i.rateInfo.fees"
},
rateTotal: {
"$add": [
"$$i.rateInfo.baseRate",
"$$i.rateInfo.tolls",
"$$i.rateInfo.fees"
]
}
}
}
}
}
}
])
這是Mongo游樂場供您參考。
對于您的試驗,您已經弄清楚了為什么要進行$reduce試驗。對于您的$unwind試用,結果實際上是正確的。只是陣列被陣列“展平”。您實際上應該能夠看到多個檔案,因為它們對應于每個陣列條目。由于您只是查看第一個檔案,因此您正在查看第一個陣列元素的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459241.html
標籤:节点.js mongodb 表示 猫鼬 mongodb查询
