javascript - 高效地向 MongoDB 结果添加额外字段

标签 javascript node.js mongodb aggregation-framework

对于 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/

相关文章:

javascript - knockout JS 绑定(bind)到对象的属性

javascript - TinyMCE 皮肤,比

javascript - 获取 $watch 不是 AngularJS 中的函数错误

html - Angular 6,ngFor 标识符未定义

MongoDB : How can I project all field types for a single document?

javascript - 从元素中删除/重置继承的 css

node.js - 没有 'new' 就无法调用类构造函数 - 带有 commonjs 的 typescript

javascript - Chai 单元测试-expect(42).to.be.an ('integer')

mongodb - 插入 MongoDB 并存储 ObjectID?

mongodb - 如何使用正则表达式重命名 mongodb 字段