使用mongoose转换文档数组

los*_*ion 1 mongoose node.js

我正在运行一个特殊的查询,我想在之后转换结果.

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

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

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

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.
});
Run Code Online (Sandbox Code Playgroud)

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

想法?我在文档中遗漏了什么吗?

Joh*_*yHK 5

您可以使用lean查询,以便从查询返回一个普通JS对象数组,然后用于map转换数组:

User.find({}).lean().exec(err, users) {
    users = users.map(function(user) {
        // transform user into newuser as needed.
        ...
        return newuser;
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 注意:`lean` 除了将查询转换为普通 JS 对象之外,还有其他后果,例如摆脱虚拟、方法等。我需要的只是对查询中的项目使用 `toObject()` 方法(使用`地图`) 代替。 (2认同)
  • @rakeshkashyap或者,这些天:`let usersObj = users.map(user => user.toObject());` (2认同)