我有一个像这样的mongo文档.
{
"_id" : ObjectId("50b429ba0e27b508d854483e"),
"array" : [
{
"id" : "1",
"letter" : "a"
},
{
"id" : "2",
"letter" : "b"
}
],
"tester" : "tom"
}
Run Code Online (Sandbox Code Playgroud)
我希望能够array使用单个mongo命令插入和更新,而不是在find()当时运行中使用条件insert(),update()具体取决于对象的存在.
这id是我想成为选择器的项目.所以如果我用这个更新数组:
{
"id" : "2",
"letter" : "c"
}
Run Code Online (Sandbox Code Playgroud)
我必须使用一个$set声明
db.soup.update({
"tester":"tom",
'array.id': '2'
}, {
$set: {
'array.$.letter': 'c'
}
})
Run Code Online (Sandbox Code Playgroud)
如果我想在数组中插入一个新对象
{
"id" : "3",
"letter" : "d"
}
Run Code Online (Sandbox Code Playgroud)
我必须使用一个$push声明
db.soup.update({
"tester":"tom"
}, { …Run Code Online (Sandbox Code Playgroud) 有没有选择用mongoose执行批量upserts?所以基本上有一个数组并插入每个元素,如果它不存在或更新它,如果它存在?(我正在使用海关_ids)
当我使用.insert时, MongoDB会为重复键返回错误E11000(应该更新).插入多个新文档可以正常工作:
var Users = self.db.collection('Users');
Users.insert(data, function(err){
if (err) {
callback(err);
}
else {
callback(null);
}
});
Run Code Online (Sandbox Code Playgroud)
使用.save会返回一个错误,该参数必须是单个文档:
Users.save(data, function(err){
...
}
Run Code Online (Sandbox Code Playgroud)
这个答案表明没有这样的选择,但它具体针对C#而且已经有3年了.所以我想知道是否有任何选择使用猫鼬做到这一点?
谢谢!