如果某个元素不存在或在 mongodb 中更新,则推送数组元素
push an array element if certain element not exists or update in mongodb
我必须根据从 req.value
.
获得的字符串更新文档中的数组
我的collection
[
{
"_id": 1,
"key": [
"1-value-1",
"1-value-2"
]
},
{
"_id": 2,
"key": [
"2-value-1",
"2-value-2"
]
}
]
我还有一个字符串newString
。
让我们假设两个条件:
- 当
req.value
在数组中时,在这种情况下将数组值替换为 newString
。
- else
rew.value
不存在简单地将 newString
推入数组。
例如:我有一个 newString = 1-value-3
和 req.value = 1-value-2
在这种情况下替换数组值 1-value-2 to 1-value-3
。
否则,如果 req.value
不在数组中,将 newString
值推送到数组。
这是我要对其执行操作的 collection。
感谢您提前回答。
使用管道更新
查询
- 如果
1-value-2 exists
更改为 1-value-3
- else `将 1-value-3 推入数组的末尾(我想你想要这个)
- 过滤以检查它是否存在
- 如果存在要更新的地图
- else concat 添加到数组末尾
Playmongo(更新,存在)
Playmongo(推送(连接),缺失)
update(
{"_id": {"$eq": 1}},
[{"$set":
{"v2-exists":
{"$ne":
[{"$filter":
{"input": "$key", "cond": {"$eq": ["$$this", "1-value-2"]}}},
[]]}}},
{"$set":
{"key":
{"$cond":
["$v2-exists",
{"$map":
{"input": "$key",
"in":
{"$cond":
[{"$eq": ["$$this", "1-value-2"]}, "1-value-3", "$$this"]}}},
{"$concatArrays": ["$key", ["1-value-3"]]}]}}},
{"$unset": ["v2-exists"]}])
更新运算符
Query1(检查是否存在)
find({"_id": {"$eq": 1}, "key": {"$elemMatch": {"$eq": "1-value-2"}}})
如果query1为空结果发送这个(最后推送)
update(
{"_id": {"$eq": 1}},
{"$push": {"key": "1-value3"}})
否则发送这个(设置为替换旧值)
update(
{"_id": {"$eq": 1}},
{"$set": {"key.$[m]": "1-value-3"}},
{"arrayFilters": [{"m": {"$eq": "1-value-2"}}]})
我必须根据从 req.value
.
我的collection
[
{
"_id": 1,
"key": [
"1-value-1",
"1-value-2"
]
},
{
"_id": 2,
"key": [
"2-value-1",
"2-value-2"
]
}
]
我还有一个字符串newString
。
让我们假设两个条件:
- 当
req.value
在数组中时,在这种情况下将数组值替换为newString
。 - else
rew.value
不存在简单地将newString
推入数组。
例如:我有一个 newString = 1-value-3
和 req.value = 1-value-2
在这种情况下替换数组值 1-value-2 to 1-value-3
。
否则,如果 req.value
不在数组中,将 newString
值推送到数组。
这是我要对其执行操作的 collection。
感谢您提前回答。
使用管道更新
查询
- 如果
1-value-2 exists
更改为1-value-3
- else `将 1-value-3 推入数组的末尾(我想你想要这个)
- 过滤以检查它是否存在
- 如果存在要更新的地图
- else concat 添加到数组末尾
Playmongo(更新,存在)
Playmongo(推送(连接),缺失)
update(
{"_id": {"$eq": 1}},
[{"$set":
{"v2-exists":
{"$ne":
[{"$filter":
{"input": "$key", "cond": {"$eq": ["$$this", "1-value-2"]}}},
[]]}}},
{"$set":
{"key":
{"$cond":
["$v2-exists",
{"$map":
{"input": "$key",
"in":
{"$cond":
[{"$eq": ["$$this", "1-value-2"]}, "1-value-3", "$$this"]}}},
{"$concatArrays": ["$key", ["1-value-3"]]}]}}},
{"$unset": ["v2-exists"]}])
更新运算符
Query1(检查是否存在)
find({"_id": {"$eq": 1}, "key": {"$elemMatch": {"$eq": "1-value-2"}}})
如果query1为空结果发送这个(最后推送)
update(
{"_id": {"$eq": 1}},
{"$push": {"key": "1-value3"}})
否则发送这个(设置为替换旧值)
update(
{"_id": {"$eq": 1}},
{"$set": {"key.$[m]": "1-value-3"}},
{"arrayFilters": [{"m": {"$eq": "1-value-2"}}]})