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如何仅在不存在时插入(如果存在则不更新)?

MongoDB原子“findOrCreate”:findOne,如果不存在则插入,但不更新

Mongoose/MongoDB 如果不存在则基于 Schema 创建集合

MongoDB中updateOne超过findOneAndUpdate的用例[重复]

《MongoDB入门教程》第14篇 CRUD之更新文档