我在这个查询上苦苦挣扎了大约三个小时,没有结果。我有这个猫鼬架构:

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;
        });
    });


现在效果很好。

10-07 14:54
查看更多