5

使用 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 保留原始值。

谢谢。

4

3 回答 3

6

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

User.native(function(err, collection) {

    collection.findAndModify(
        {name: 'brian'}, 
        {$unset: {age: true}}, 
        function (err, object) {
           // Continue...
        }
    );
})
于 2014-08-26T04:28:09.897 回答
0

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"});
      }
   );
});
于 2016-10-31T12:32:46.850 回答
0

当前接受的答案不适用于当前版本的 Sails 和 Mongo。在 Sails 1.1.0 ( sails-mongo1.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: ""}},
)
于 2019-07-11T16:54:27.600 回答