1

我正在运行一个特殊查询,我想在其中转换结果。

User.find({}, function(err, users) {
  // I want to remove/add some properties from/to each user here
});

有没有办法转换文档数组?这也是一种特殊情况,所以我不想对 Schema 应用转换,我认为这会像我想要的那样转换每个文档,但也会影响对 User 模型的所有其他查询。

基本上我希望能够对返回的文档数组执行一次转换。

User.find({}, function(err, users) {
  // I want to remove/add some properties to each user here
  users.toJSON({transform: function(doc,ret,options) { /* do tranform*/ });
  // That will not work as I get an error that toJSON is not defined for that
  // array that was returned.
});

我可以通过在查询之前添加一个转换然后在查询完成时删除该转换来伪造它,但恕我直言,这是一个非常糟糕的黑客攻击。

想法?我错过了文档中的某些内容吗?

4

1 回答 1

7

您可以使用lean查询,以便从查询返回纯 JS 对象数组,然后使用它map来转换数组:

User.find({}).lean().exec(err, users) {
    users = users.map(function(user) {
        // transform user into newuser as needed.
        ...
        return newuser;
    });
});
于 2013-07-22T19:22:05.553 回答