如果对象存在,如何_更新_ Mongo对象到数组中,如果不存在,将其添加到数组中?

时间:2018-08-18 18:09:39

标签: arrays node.js mongodb

我正在学习Mongo,但遇到了一个棘手的问题。这是针对一堂课的,因此尽管使用Mongoose可能会更容易(或可能不会),但我们应该使用Mongo来实现。

我正在制作一个简单的应用程序来处理各种用户的联系人。该集合将包含一个由多个用户组成的数组,每个用户将具有一个联系人数组,并且这些联系人数组将包含带有各种字符串的对象数组。

  users: [
    user: {
      contacts: [
       contact: {
             name:"a string"
               }
              ]
          }

      ]

我想要做的是拥有一个函数updateContact,我将向其中传递username和一个contact对象。仅当且仅当该联系人的contacts字段上没有匹配项时,该函数才会将联系人添加到用户的name数组中,但如果name字段上存在匹配项,该函数将向该用户的contact数组中添加联系人更新匹配的联系人对象中的信息。

我可以弄清楚如何添加新的 return this._users.findOne({username}) .then(user => { if (!user) throw new LogicError(`user ${username} does not exist`) return this._users.updateOne( user, {$push: {"contacts": contact}} ) }) ,而不是如何检查数组中是否存在新的findOne并在这种情况下执行合并。

我有

contact

我的想法是先对catch进行检查,以查看数组中是否已存在<span data-ng-bind-html="vm.myvalue | {{ vm.myfilter }}"></span> ,并且仅在缺少上述代码的情况下才将其添加,但是我没有知道如何处理不存在的情况-也就是说,如果我使用Promises,我是否将上面的“ add”代码放在<span data-ng-bind-html="vm.myvalue | {{vm.chooseFilter()}}"></span> 中?

我确定必须有一种解决此问题的方法,并且我一直在研究Stack Overflow,但尚未找到解决方案。任何帮助,不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以尝试:

 var contact={"contact":{"name":"abd"}};

db.users.update(
        {$and:[{"username":"abc"},
                   {"contacts": {$nin: [{"contact":{"name":"abd"}}]}}
        ]},
        {$push: {"contacts": contact}});