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) {
...
}
);
根据 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
}
});
});
有谁知道 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) {
...
}
);
根据 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
}
});
});