【问题标题】:Sails.js & Waterline ORM unset key MongoDBSails.js 和 Waterline ORM 未设置键 MongoDB
【发布时间】:2014-08-18 20:31:33
【问题描述】:

使用 Waterline ORM 在 MongoDB 中取消设置键的方法是什么?

考虑以下文档:

{
    name : 'brian',
    age : 29
}

获取用户没问题:

var users = Users.findOne({ name : 'brian' }).exec(cb);

我希望年龄可以简单地消失。我尝试了以下方法来完成此操作:

user.age = undefined;
user.save();

user.age = null;
user.save();

delete user.age;
user.save();

似乎没有一个工作。 #1设置为null,#2设置为null,#3保留原值。

谢谢。

【问题讨论】:

  • 我不认为它受支持(因为 Waterline 是通用的,而 $unset 是特定于适配器的)。您需要 this vs null 有什么特别的原因吗?
  • @Xinzz,不,我想不是。我想唯一的原因是直接在数据库中的可读性以仅显示设置的内容(null 或不)以及根本不属于那里的内容。

标签: sails.js waterline sails-mongo


【解决方案1】:

Waterline 是一种 ORM,旨在支持广泛的数据存储,因此它不支持特定于 MongoDB 的方法。您始终可以使用 .native() 方法访问底层 MongoDB 驱动程序,然后做任何您想做的事情(有关可用方法,请参阅 MongoDB node driver docs):

User.native(function(err, collection) {

    collection.findAndModify(
        {name: 'brian'}, 
        {$unset: {age: true}}, 
        function (err, object) {
           // Continue...
        }
    );
})

【讨论】:

    【解决方案2】:

    Mongodb 服务器版本 3.2.9。 Sails 版本是 0.12.6。节点版本为 0.12.4

    Policies.native(function(err, collection) {
       var ObjectID = require('mongodb').ObjectID;
       collection.update(
          {"_id": new ObjectID(req.param('id'))},
          {$unset: {defaultSchema: ""}},
          function (err, object) {
             if(err) return res.badRequest(err);
             res.ok({"message":"Ok"});
          }
       );
    });
    

    【讨论】:

      【解决方案3】:

      当前接受的答案不适用于当前版本的 Sails 和 Mongo。在 Sails 1.1.0 (sails-mongo 1.0.1) 和 mongo 4.0 中,User 是 Sails 模型的名称,取消设置 email 字段:

      const ObjectId = require('mongodb').ObjectID
      const mongo = User.getDatastore().manager
      const userCollection = mongo.collection(User.tableName)
      
      await userCollection.update(
        {_id: ObjectId(someUserIdString)},
        {$unset: {email: ""}},
      )
      

      【讨论】:

        猜你喜欢
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        相关资源
        最近更新 更多