Sails.js & Waterline ORM сбросить ключ MongoDB
Какой метод используется для сброса ключа в MongoDB с помощью Waterline ORM?
Рассмотрим следующий документ:
{
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 оставляет исходное значение.
Благодарю.
2 ответа
Waterline - это ORM, предназначенный для поддержки широкого спектра хранилищ данных, поэтому он не поддерживает методы, характерные только для MongoDB. Вы всегда можете получить доступ к базовому драйверу MongoDB, используя .native()
метод, затем сделайте все, что вы хотите (см. документацию драйвера узла MongoDB для доступных методов):
User.native(function(err, collection) {
collection.findAndModify(
{name: 'brian'},
{$unset: {age: true}},
function (err, object) {
// Continue...
}
);
)
В настоящее время принятый ответ не работает с текущими версиями Sails и Mongo. В паруса 1.1.0 (sails-mongo
1.0.1), с монго 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: ""}},
)
Сервер Mongodb версия 3.2.9. Версия паруса 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"});
}
);
});