【问题标题】:How to add an element to an array inside a document that does not contain a certain element that is inside that array?如何将元素添加到文档内的数组中,该文档不包含该数组内的某个元素?
【发布时间】:2021-06-20 00:50:28
【问题描述】:

$%所以我现在已经尝试了几个小时,但基本上我想在以前未找到该元素的所有文档中的数组内添加一个元素。我尝试了很多方法,例如 $elemMatch 和 $nin,但我还没有找到解决问题的方法。

示例 基本上我想要的设置是说有 3 个文档,只有 1 个文档在位于所有 3 个文档中的数组内有一个名为“橙色”的值,但其他 2 个文档没有橙色。我希望 api 看到它并将橙色元素添加到当前没有它的 2 个文档中。

显然这是我的问题的一个例子,而不是我需要它的用例,但基本上这是我迄今为止使用的代码。

const query = payload.query;
const mongodb = await context.services.get("mongodb-atlas");
const Lobbies = await mongodb.db("Sword_Universe").collection("Lobbies");
const lobby = Lobbies.updateMany(
        {players: {$nin: query.playerName}}, 
        {players: {$push: query.playerName}}
    );

【问题讨论】:

  • 两件事。存储在数组中的内容是原始字符串“Orange”还是托管对象?第二件事:从概念上讲,您所说的是对于所有没有“橙色”的对象,您希望它们具有“橙色”。这将转换为“所有对象都将具有“橙色””,对吧?

标签: node.js mongodb realm


【解决方案1】:

这是 $push 更新运算符的错误语法。

用途:

{$push: {players: query.playerName}}

【讨论】:

    【解决方案2】:

    样本集合

     [
          {
            "_id": 1
            "fruits": [
              "apple",
              "grape"
            ]
          },
          {
            "_id": 2
            "fruits": [
              "apple",
              "orange"
            ]
          }
     ]
    

    通过运行 $addToSet 它将推入没有此元素的数组

    db.collection.updateMany({},{"$addToSet": {"fruits": "orange"})
    

    结果

    [
     {
       "_id": 1
       "fruits": [
           "apple",
           "grape",
           "orange"
        ]
     },
     {
       "_id": 2
       "fruits": [
           "apple",
           "orange"
        ]
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2019-09-01
      相关资源
      最近更新 更多