我在这个查询上苦苦挣扎了大约三个小时,没有结果。我有这个猫鼬架构:
var User = mongoose.Schema({
username: { type: String, required: true },
email: { type: String, required: true },
password: { type: String, required: true },
name: { type: String, required: true },
surname: { type: String, required: true },
tags: [{
type: { type: String },
name: { type: String }
}, { _id: false }]
};
我需要在标签数组上执行一些操作。我需要做的就是简单地添加和删除客户端发送的标签。我创建了两个嵌套查询来做到这一点:
updateTagsById: function(id, obj){
var add = [];
var remove = [];
for (var i = 0; i < obj.add.length; i++) {
add.push({ type: obj.type, name: obj.add[i] });
}
for (var i = 0; i < obj.remove.length; i++) {
remove.push({ type: obj.type, name: obj.remove[i] });
}
User.update({_id: id} , { $pushAll:{ tags: add } }, function(err){
if(err) throw err;
User.update({_id: id} , { $pullAll: { tags: remove } }, function(err){
if(err) throw err;
console.log('ok');
return true;
});
});
}
所有功能均执行无误,但如果我转到mongo shell,则可以看到只有push查询运行良好。我尝试了各种没有结果的查询。谁能帮助我了解为什么第二个查询不起作用?
编辑:
这是关于我的obj对象的结构,其中type是一个简单字符串,而add和remove是字符串数组。
var obj = {
type: $rootScope.Modal.content,
add: $rootScope.Modal.addCache,
remove: $rootScope.Modal.removeCache
}
最佳答案
我已经通过更改嵌套查询解决了该问题。
User.update({_id: id} , { $pushAll:{ tags: add } }, function(err){
if(err) throw err;
User.update({_id: id} , { $pull: { tags: { name: { $in: obj.remove } } } }, function(err){
if(err) throw err;
});
});
现在效果很好。