代码之家  ›  专栏  ›  技术社区  ›  Jshin

为什么在节点js上使用mongodb时,$pull不起作用[duplicate]

  •  0
  • Jshin  · 技术社区  · 8 年前

    User.update({ _id: fromUserId }, { $pull: { linkedUsers: [idToDelete] } });
    

    fromUserId &安培; idToDelete 都是对象ID。

    用户模式如下:

    var UserSchema = new Schema({
      groups: [],
      linkedUsers: [],
      name: { type: String, required: true, index: { unique: true } }
    });
    

    linkedUsers

    我也试过了:

    User.findOne({ _id: fromUserId }, function(err, user) {
      user.linkedUsers.pull(idToDelete);
      user.save();
    });
    

    当我在不同的位置控制数组的长度但调用之后,第二个选项似乎几乎可以工作 save 检查一下,长度仍然是36:

     User.findOne({ _id: fromUserId }, function(err, user) {
        console.log(user.linkedUsers.length); // returns 36
        user.linkedUsers.pull(idToDelete);
        console.log(user.linkedUsers.length); // returns 35
        user.save();
      });
    

    所以看起来我很亲近,但还是没有运气。两个ID都是通过应用程序的前端发送的。 我正在运行这些版本:

    "mongodb": "^2.2.29",
    "mongoose": "^5.0.7",
    

    提前谢谢。

    0 回复  |  直到 8 年前
        1
  •  6
  •   chridam Gino Claudi    8 年前

    groups: [{ type: Schema.Types.ObjectId, ref: 'Group' }], 
    linkedUsers: [{ type: Schema.Types.ObjectId, ref: 'User' }]
    

    User.findOneAndUpdate( 
        { _id: fromUserId }, 
        { $pullAll: { linkedUsers: [idToDelete] } }, 
        { new: true }, 
        function(err, data) {} 
    );
    

    User.findByIdAndUpdate(fromUserId, 
        { $pullAll: { linkedUsers: [idToDelete] } }, 
        { new: true }, 
        function(err, data) {} 
    );
    
        2
  •  3
  •   Pierrickouw    6 年前

    我也有类似的问题。我想从数组中删除一个对象,使用mongo中的默认\u id,但我的查询是错误的:

    const update = { $pull: { cities: cityId }};
    

    它应该是:

    const update = { $pull: { cities: {_id: cityId} }};
    
    推荐文章