使用SailsJS模型定义查询属性

时间:2015-10-06 09:41:59

标签: node.js mongodb sails.js

我想通过id查询库,我只需要一些属性。我试过下面的脚本,但它不起作用:

Library.findOne({
  id: libraryId
}, {
  latitude: 1, longitude: 1,
  name: 1, address: 1, image: 1
}).exec(function (err, libObj) {
  if (err)
    return res.ok(err);

  return res.ok(libObj);
});

我的代码有什么问题?

2 个答案:

答案 0 :(得分:3)

对于投影,您可以使用可以直接访问mongo驱动程序的 native() 方法:

var criteria = { id: libraryId },
    projection = { latitude: 1, longitude: 1, name: 1, address: 1, image: 1 };
// Grab an instance of the mongo-driver
Library.native(function(err, collection) {        
    if (err) return res.serverError(err);

    // Execute any query that works with the mongo js driver
    collection.findOne(criteria, projection).exec(function (err, libObj) {
        console.log(libObj);
    });
});

- 更新 -

另一种选择是使用 find() 方法,该方法可以接受条件和投影文档作为参数,并附加 limit(1) 以仅返回一个文献。对于投影对象,您需要使用包含投影字段数组的select键:

var criteria = { _id: Library.mongo.objectId(libraryId) },
    projection = { select: [ "latitude", "longitude", "name", "address", "image" ] };

Library.find(criteria, projection).limit(1).exec(function (err, res) {
    var libObj = res[0];
    console.log(libObj );
});

答案 1 :(得分:1)

@chridam非常感谢您的回答。我改变了一些东西,脚本运作良好

var criteria = { _id: Library.mongo.objectId(libraryId) },
    projection = { latitude: 1, longitude: 1, name: 1, address: 1, image: 1 };

// Grab an instance of the mongo-driver
Library.native(function(err, collection) {        
    if (err) return res.serverError(err);

    // Execute any query that works with the mongo js driver
    collection.findOne(criteria, projection, function (err, libObj) {
        sails.log(libObj);
        sails.log(err);
    });
});