Sau*_*wal 6 javascript mongodb node.js mongodb-query
我试图在mongoDB数组中插入,更新,删除值。我的mongoDB版本是3.4.23。
这是我的收藏:
{
"link": "abc.com",
"Values": [{
"valueID": "v1",
"date": "05-07-2015",
"value": "10"
}]
}
Run Code Online (Sandbox Code Playgroud)
我试图做一些UPSERT类型的查询插入/更新的Values阵列数据,但没能如愿。我有此解决方案,但对我不起作用。
可以说我有 "valueID": "v1"
{
"valueID": "v1",
"date": "05-07-2015",
"value": "20"
}
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,我想"value": "20"在上述集合中进行设置,因此输出应为:
{
"link": "abc.com",
"Values": [{
"valueID": "v1",
"date": "05-07-2015",
"value": "20"//updated value
}]
}
Run Code Online (Sandbox Code Playgroud)
如果我通过了,"valueID": "v2"它应该将新值插入到集合中,如下所示:
{
"link": "abc.com",
"Values": [{
"valueID": "v1",
"date": "05-07-2015",
"value": "10"
},
{
"valueID": "v2",
"date": "xyz",
"value": "xyz"
}]
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助。
蒙古数据库4.2
从 MongoDB 4.2开始,db.collection.update()方法可以接受指定要执行的修改的聚合管道[ stage1, stage2, ... ] 。
所以这里$reduce使用一些$condition 的操作符就可以解决这个问题。
db.getCollection("ashish2").update(
//filter criteria for the update operation
{ },
[{ "$set": {
"Values": {
"$reduce": {
"input": "$Values",
"initialValue": [],
"in": {
"$concatArrays": [
"$$value",
{
"$cond": [
// Here you can select your value with which you want to match
{ "$eq": ["$$this.valueID", "v2"] },
// Updation after match
[{ "valueID": "v1", "date": "05-07-2015", "value": "20" }],
// Updation when doesn't match
{
"$concatArrays": [
[{ "valueID": "v1", "date": "05-07-2015", "value": "20" }],
["$$this"]
]
}
]
}
]
}
}
}
}}]
)
Run Code Online (Sandbox Code Playgroud)
注意:对于私有版本,您必须使用两个查询,或者您可以查看此答案Can youspecify a key for $addToSet in Mongo?
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |