向MongoDB结果添加额外的字段可以有效地进行
Adding extra fields to MongoDB result efficiently
对于API,我从MongoDB返回对象列表。为了更加 RESTful,我想为每个对象添加一个字段link
。我的方法是在处理请求时计算它,并在一个简单的循环中添加每个对象的链接:
exports.list = function (req, res) {
collection.find({}, {fields: {a: 1, b: 1, c: 1}, function (err, docs) {
for (var i = 0; i < docs.length; i++) {
docs[i].link = 'http://api.example.com/fooobject/' + docs[i]._id;
}
res.send(docs);
});
};
但是,我感觉这种方式可能不是很有效。有没有更好的方法?例如,直接告诉MongoDB进行这种计算?
或者甚至建议将完整链接保存在数据库本身中?
如果你想以这种方式"重塑"你的文档,你可以使用.aggregate()
方法而不是查找:
collection.aggregate([
{ "$project": {
"a": 1,
"b": 1,
"c": 1,
"link": { "$concat": [
"http://api.example.com/fooobject/",
"$_id"
]}
}}
],function(err,result) {
// Output work here
})
这将使用$project
通过选择和创建字段来"塑造"文档响应。在这种情况下,可以使用$concat
将字符串与_id
字段的值连接起来。
若要将查询信息添加到搜索中,请参阅 $match
运算符。
有关其他用法,请参阅聚合框架运算符的参考。
相关文章:
- 将字段设置为有条件地使用所需的字段验证器
- jsrender是否可以动态地呈现字段名
- Magento表单验证,表单提交时没有有效字段
- 按键时标记为ng的必填字段有效,即使是's是空的
- Extjs 3.3动态地将字段添加到表单中,并设置它们的标签宽度
- 如何正确地将动态输入字段传递到另一个页面进行显示
- cakepp中的javascript验证表示字段不是't是必需的't有效
- Angular JS字段仅当其值大于tan零时有效
- 禁用字段在IE中有效,但在Firefox中无效
- 是否可以在字段有效时触发事件(html5)
- ExtJS有条件地呈现输入字段
- 如何使必填字段在有效时不可见
- 有条件地在返回语句中包含 json 字段
- 在 AngularJS 中,如何在输入字段中输入有效数据时在输入字段前面显示绿色刻度线
- 动态地为字段指定不同的名称,以便我可以单独通过电子邮件发送它们
- jQuery 验证插件如何指示所有字段都有效
- 如何告诉DDP有选择地观察更改某些字段,而不是所有定义的字段
- 一旦用户在输入字段中输入有效的美国邮政编码值,如何自动填充城市和州输入字段
- 如何有效地添加?在我用JavaScript创建的表单中添加许多字段
- 向MongoDB结果添加额外的字段可以有效地进行