在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);
  });
});
广告
将在 10 秒后关闭
bannerAds