需要修改json并返回异步查找操作

时间:2016-07-14 15:28:45

标签: javascript node.js mongodb mongoose bluebird

我需要浏览一个对象id列表,找到一个用户,然后修改json对象并返回它。

我看过蓝鸟,但下面的代码没有执行我想要的方式。似乎在返回它之后修改了json对象。

我试图返回user["test"] = "lol",但只返回“test”的值,而我需要整个更新的json。

Promise.map(['5781635026d6fad4486d81e9', '578296e31029e27b4ea53e9d'], function(i) {
  return User.findOneAsync({
    _id: i
  }).then(function(user) {
    user["test"] = "lol";
    return user;
  });
}).then(function(array) {
  res.send(array);
})

这有一个优雅的解决方案吗?

1 个答案:

答案 0 :(得分:3)

您可以采取的一种简单方法是在查询中使用带有ids数组的 $in 运算符,然后应用 lean() 将普通JS对象作为Mongoose documents返回的方法不允许添加属性。

看看这个例子:

User.find({ "_id": { "$in": ['5781635026d6fad4486d81e9', '578296e31029e27b4ea53e9d'] } })
    .lean()
    .exec()
    .then(function(docs) {  
        var users = docs.map(function(user) {
            user["test"] = "lol";
            return user;
        });
        res.send(users);
    })