StrongLoop:它是否支持从 MongoDB 数据库的查询中将字段限制为 Return?

StrongLoop: does it support Limit Fields to Return from a Query for MongoDB databases?

有谁知道 strongloop 是否支持从 MongoDB 数据库的查询中将字段限制为 return?我认为 strongloop 不支持所有 MongoDB 查询功能,所以恐怕这可能不受支持。

这就是我想使用 strongloop 实现的目标:

https://docs.mongodb.org/v3.0/tutorial/project-fields-from-query-results/

MongoDB操作示例(在数据库内执行):

不限制字段:

> db.Releases.find({epoch_time: {$gte: 1451417675, $lt: 1483717675}})
{ "_id" : ObjectId("5682bbcbab755688f9bfd939"), "release_id" : 3, "event_id" : 1, "epoch_time" : 1451417675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93a"), "release_id" : 4, "event_id" : 2, "epoch_time" : 1452717675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93b"), "release_id" : 5, "event_id" : 2, "epoch_time" : 1453717675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93c"), "release_id" : 6, "event_id" : 3, "epoch_time" : 1461207675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93d"), "release_id" : 7, "event_id" : 3, "epoch_time" : 1461407675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93e"), "release_id" : 8, "event_id" : 4, "epoch_time" : 1461417675 }
{ "_id" : ObjectId("5682bbccab755688f9bfd93f"), "release_id" : 9, "event_id" : 1, "epoch_time" : 1472717675 }
{ "_id" : ObjectId("5682bbd1ab755688f9bfd940"), "release_id" : 10, "event_id" : 5, "epoch_time" : 1473717675 }

限制字段:

> db.Releases.find({epoch_time: {$gte: 1451417675, $lt: 1483717675}},{_id:0,release_id:0,event_id:0})
{ "epoch_time" : 1451417675 }
{ "epoch_time" : 1452717675 }
{ "epoch_time" : 1453717675 }
{ "epoch_time" : 1461207675 }
{ "epoch_time" : 1461407675 }
{ "epoch_time" : 1461417675 }
{ "epoch_time" : 1472717675 }
{ "epoch_time" : 1473717675 }

我在 StrongLoop 中尝试了类似的方法,但我仍然得到查询中的所有字段。

Release.find({where: {...query expression...} },
  {_id:0,release_id:0,event_id:0},  //trying to limit return fields
  function (err, releases) {
  ...
  }
);

谢谢, 卡洛斯

是的,loopbackjs 支持在查询中限制字段。 mongodb 中的限制字段和环回查询之间的区别在于,在使用字段过滤器时,loopbackjs 默认 return 所有字段都为 false。您必须明确说明要查询哪些字段 return。

Release.find({where: {release_id : 4}, fields: {epoch_time: true}},  //return only epoch_time
  function (err, releases) {
  ...
  }
);

fields filter docs

根据 strongloop 文档 - https://docs.strongloop.com/display/public/LB/Querying+data

它提供了添加多个选项的功能,用于在 REST 端点和模型方法中查询、过滤、限制数据。

您可以像这样在远程方法中限制输出中的字段 -

Release.find(
   { fields : {"epoch_time":true} 
}, function(err, releases) {
   // ... your code here
} );

或者您可以在 https://docs.strongloop.com/display/public/LB/Operation+hooks -

中指定的操作挂钩中执行此操作
MyModel.observe('access', function logQuery(ctx, next) {
  console.log('Accessing %s matching %s', ctx.Model.modelName, ctx.query.where);
  next();
});

在我们的模型中创建一个函数

MyModel.observe('access', function logQuery(ctx, next) {
        Release.find({
            where: {
                release_id: 4
            }
        });
    });