更新mongodb中的子文档时无法唯一索引?

时间:2016-01-13 05:08:40

标签: mongodb

以下是我的数据库结构

{"dname" : "a",   "accounts" : [
        {
          'userId':'1',
          'name':'xyz'
         }
     ] 
 }

因为我已将uniqueindex dname_1,dname_1_accounts.userId_1添加到集合中,但在更新时我使用推送查询时如下所示

{$push:{"accounts" :{'userId':'1','name':'abc'}}}

{$addToSet:{"accounts" :{'userId':'1','name':'abc'}}}

它不会给出唯一键的错误或任何它向文档添加重复键值的错误

{"dname" : "a",   "accounts" : [
            {
              'userId':'1',
              'name':'xyz'
             },
             {
              'userId':'1',
              'name':'abc'
             }

         ] 
     }

如何使用nativemongo querys避免此问题?

2 个答案:

答案 0 :(得分:1)

由于您的userId存储在accounts内,因此您的索引需要在

accounts.userId

运行

db.coll.createIndex( { 'accounts.userId': 1 }, { unique: true } )

并且您的第二个插入语句现在应该失败。

答案 1 :(得分:1)

db.coll.update({“dname”:“a”,“accounts.userId”:{$ ne:'1'}},{$ push:{“accounts”:{'userId':'1 ”, '名称': 'ABC'}}})

这不会出错,但也避免在帐户数组中插入带有 userId 键的重复项