mongodb:如果元素不存在,则updateOne设置字符串数组,如果存在则保持不变
Posted
技术标签:
【中文标题】mongodb:如果元素不存在,则updateOne设置字符串数组,如果存在则保持不变【英文标题】:mongodb: updateOne set array of string if elements non present, leave unaltered if present 【发布时间】:2022-01-21 03:37:58 【问题描述】:我在 mongodb 中有以下文档:
"_id":"43434",
"mail": "test@gmail.com"
"category": ["Alimentari","Eventi","Ristorante","Servizi"]
我想编写java代码,这样如果:
-
我在输入 ["Alimentari","Eventi","Ristorante"] 中有以下字符串数组,文档保持不变
使用以下数组字符串 ["Alimentari","Bar"],文档将是:
"_id":"43434",
"mail": "test@gmail.com"
"category": ["Alimentari","Eventi","Ristorante","Servizi","Bar"]
-
如果我传递一个仅包含一个字符串 ["Alimentari"] 的数组,则文档保持不变
如果我通过以下 ["Grande Distribuzione"],文档将是
"_id":"43434",
"mail": "test@gmail.com"
"category": ["Alimentari","Eventi","Ristorante","Servizi","Grande Distribuzione"]
我用这段代码试过
String[] category= "Alimentari","Eventi","Ristorante";
collection.updateOne(
new BasicDBObject("_id", new ObjectId(_id)),
new BasicDBObject("$set", new BasicDBObject("category", category));
但生成的文档是:
"_id":"43434",
"mail": "test@gmail.com"
"category": ["Alimentari","Eventi","Ristorante"]
你能帮帮我吗? 谢谢
【问题讨论】:
【参考方案1】:对于 MongoDB 查询答案,如果值不存在,您需要 $addToSet
和 $each
将多个值添加到 category
字段中。
db.collection.update(
_id: "43434"
,
"$addToSet":
"category":
"$each": [
"Alimentari",
"Bar"
]
)
Sample Mongo Playground
【讨论】:
以上是关于mongodb:如果元素不存在,则updateOne设置字符串数组,如果存在则保持不变的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB更新数组元素(带有键的文档)如果存在,否则推送
MongoDB原子“findOrCreate”:findOne,如果不存在则插入,但不更新
Mongoose/MongoDB 如果不存在则基于 Schema 创建集合