MongoDB:将元素添加到一个数组,该数组的对象包含在另一个字段上计算的字段
MongoDB: add element to an array with an object that contains field calculated on another field
我有这个文件:
{
"_id" : ObjectId("626c0440e1b4f9bb5568f542"),
"bc" : [
{
"bc_id" : ObjectId("000000000000000000000003"),
"price" : 102
}
],
"stock_price" : 50
}
我需要向 bc 数组添加一个元素,该元素的价格是根据 stock_price 计算得出的值。
我试过这样的事情:
db.collection.updateMany(
{_id:ObjectId("626c0440e1b4f9bb5568f542")},
[
{$addToSet: {bc: {bc_id:ObjectId("000000000000000000000004"), price:{$multiply:[{$toDouble:"$stock_price"},0.80]}}}}
]
)
但 $addToSet
在聚合管道中无效。
预期结果是:
{
"_id" : ObjectId("626c0440e1b4f9bb5568f542"),
"bc" : [
{
"bc_id" : ObjectId("000000000000000000000003"),
"price" : 102
},
{
"bc_id" : ObjectId("000000000000000000000004"),
"price" : 40
}
],
"stock_price" : 50
}
查询
- 您可以使用管道更新来引用
stock_price
字段
- 通过
_id
查找
- 如果
"$bc.bc_id"
数组包含新的 bc_id
(此处 newid=3
)什么也不做,保留旧的 bc,否则压入最后(concat 数组)
update(
{"_id": {"$eq": ObjectId("626c0440e1b4f9bb5568f542")}},
[{"$set":
{"bc":
{"$cond":
[{"$in": [3, "$bc.bc_id"]}, "$bc",
{"$concatArrays":
["$bc",
[{"bc_id": 3, "price": {"$multiply":["$stock_price", 0.8]}}]]}]}}}],
{"multi": true})
我有这个文件:
{
"_id" : ObjectId("626c0440e1b4f9bb5568f542"),
"bc" : [
{
"bc_id" : ObjectId("000000000000000000000003"),
"price" : 102
}
],
"stock_price" : 50
}
我需要向 bc 数组添加一个元素,该元素的价格是根据 stock_price 计算得出的值。 我试过这样的事情:
db.collection.updateMany(
{_id:ObjectId("626c0440e1b4f9bb5568f542")},
[
{$addToSet: {bc: {bc_id:ObjectId("000000000000000000000004"), price:{$multiply:[{$toDouble:"$stock_price"},0.80]}}}}
]
)
但 $addToSet
在聚合管道中无效。
预期结果是:
{
"_id" : ObjectId("626c0440e1b4f9bb5568f542"),
"bc" : [
{
"bc_id" : ObjectId("000000000000000000000003"),
"price" : 102
},
{
"bc_id" : ObjectId("000000000000000000000004"),
"price" : 40
}
],
"stock_price" : 50
}
查询
- 您可以使用管道更新来引用
stock_price
字段 - 通过
_id
查找
- 如果
"$bc.bc_id"
数组包含新的bc_id
(此处newid=3
)什么也不做,保留旧的 bc,否则压入最后(concat 数组)
update(
{"_id": {"$eq": ObjectId("626c0440e1b4f9bb5568f542")}},
[{"$set":
{"bc":
{"$cond":
[{"$in": [3, "$bc.bc_id"]}, "$bc",
{"$concatArrays":
["$bc",
[{"bc_id": 3, "price": {"$multiply":["$stock_price", 0.8]}}]]}]}}}],
{"multi": true})