如何首先检查 mongodb 中的数组,如果它还没有包含这个项目(字符串),然后添加项目?

Posted

技术标签:

【中文标题】如何首先检查 mongodb 中的数组,如果它还没有包含这个项目(字符串),然后添加项目?【英文标题】:How to first check the array in mongodb and then add item if it does not already contain this item(string)? 【发布时间】:2021-12-16 22:00:37 【问题描述】:

这是我到目前为止的代码:

Scorecard.findOneAndUpdate(
     _id: fielderRoleInfo.player_id ,
     $push:  ["score." + n + ".catches"]: dismissedPlayer  ,
    function (err, docs) 
      if (err) 
        console.log(err);
       else 
        // console.log("Updated Fielder : ", docs);

      
    
  );

dismissedPlayer 和 fielderRoleInfo 在代码的其他地方定义。此代码在分数数组中的对象内的 catches 数组中添加重复的字符串(dismissedPlayer)(分数是一个对象数组)。我想首先检查字符串(dismissedPlayer)是否存在于数组中,如果不存在,则只添加数组。注意:dismissedPlayer 是一个变量,它会有动态值

【问题讨论】:

而不是 $push ,使用 $addToSet 在更新的过滤器中,如果数组字段中存在dismissedPlayer,您可以包含条件(您可以使用$eq 运算符)。 请参阅 MongoDB 手册中的此示例:Query an Array Element。您可以根据需要使用$eq$ne 运算符。 @mohammadNaimi 谢谢 所以如果可能的话我会回答并接受它? 【参考方案1】:

用 $addToSet 代替 $push 对我有用。

$addToSet 运算符向数组添加一个值,除非该值是 已经存在,在这种情况下 $addToSet 对该数组没有任何作用。

【讨论】:

以上是关于如何首先检查 mongodb 中的数组,如果它还没有包含这个项目(字符串),然后添加项目?的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb检查数组的子文档中是否存在字段

MongoDB更新数组元素(带有键的文档)如果存在,否则推送

mongodb:查询以检查数组中的项目是不是包含特定字符串[重复]

如何在 mongodb/mongoose 的嵌套数组中检查是不是存在并更新对象?

如何使用 mongodb 和 node js 更新和拉取用户

如何过滤mongodb聚合中的主数组