以下是我的数据库结构
{"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避免此问题?
答案 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 键的重复项