在Sails.js(0.10.x)中,如何使用Model.native()编写指定ID的查询方法.
用Sails.js(0.10.x)的Model.native()方法来编写指定ID的查询方法
在使用Sails.js上的MongoDB时,希望使用$inc操作符,尝试使用native()执行查询时,由于难以指定Model的ID,所以做下记录。
实施方式
我想要使用mongodb模块中的ObjectID,所以进行安装。mongodb模块中的ObjectID是bson模块中ObjectID的封装器,所以也可以只安装bson模块。我觉得将来可能会使用mongodb,所以选择了mongodb。
$ npm install mongodb --save
由于可能需要从多个控制器/模型中使用,所以将其定义为服务。
module.exports = (function() {
var mongo = require('mongodb');
var id = mongo.ObjectID;
return {
ObjectID: id
};
})();
只需在native执行时将id(字符串)传递给Mongo.ObjectID()即可。另外,在通常的find()或update()中指定id时,键名是id,但在native()中则是_id。这是因为mongo将其定义为_id,并且Sails.js会很好地将其转换,所以请注意。
Message.native(function(err, collection) {
collection.update({_id: Mongo.ObjectID(id)}, {$inc: {like: 1}}, function(err, results) {
res.send(200);
});
});
顺便说一句,如果想用update()函数做同样的事情,会变成这样。
Message.findOne(id).exec(function(err, message) {
Message.update({id: id}, {like: message.like + 1}).exec(function(err, message) {
res.send(200);
});
});