对于 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做这样的计算?
或者甚至建议将完整链接保存在数据库本身中?
最佳答案
如果您想以这种方式“ reshape ”您的文档,您可以使用 .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
运算符。
对于其他用途,请参阅 aggregation framework operators 的引用.
关于javascript - 高效地向 MongoDB 结果添加额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888053/