node.js - Mongoose .find 查询结果包含查询元数据?不能只手动投影集合的每个属性,如何只获取文档?

标签 node.js mongodb mongoose mongodb-query

<分区>

我的一系列文档 looks like this一旦从后端检索:

41:
$__: {strictMode: true, selected: {…}, shardval: null, saveError: null, validationError: {…}, …}
$init: true
$locals: {}
errors: {undefined: {…}, files: {…}}
isNew: false
_doc: {status: "Finished", isOnHold: false, requirements: Array(0), files: Array(0), reportFileIds: Array(1), …}
__proto__: Object

每个项目的实际文档都在 _doc 下。这是 mongoose.Find 查询的结果:

        let query = Job.find({
            _id: {
                $in: data.jobs
            }
        });

        let result = await query.exec();

现在,如果我尝试在发送之前获取该结果数组的项目,它看起来不像在前端实际建模的内容,这很奇怪。

有什么方法可以使用 mongoose.find 获取纯文档数组吗?我不能使用聚合查询,因为我不想手动投影每个可能的属性。

编辑:

这不是大声喊叫的重复,传播语法与它无关,你看到我在任何地方提到传播语法吗?这个和mongoose驱动有关。

Edit2:我最终遍历数组并在每个项目上调用 .toObject:

        let jobs = await query.exec();
        let result = [];
        for (let doc of jobs) {
            result.push(doc.toObject());
        }
        return result;

Edit3:最终调用了 query.lean().exec(),它做了正确的事情。我过去基于一个可能已经过时的 stackoverflow 示例使用精益部分作为参数,它只会返回文档的 ID。但是像上面那样调用它可以正常工作。

最佳答案

Mongoose 始终返回一个实例 mongoose 对象,默认情况下该对象是不可变的。要获取纯 JS 对象,请尝试使用 lean() 进行查询,如下所示:

const query = Job.find({
    _id: {
        $in: data.jobs
    }
});

let result = await query.lean().exec();

您可以阅读更多关于精益的信息:https://mongoosejs.com/docs/tutorials/lean.html

希望这有帮助:)

关于node.js - Mongoose .find 查询结果包含查询元数据?不能只手动投影集合的每个属性,如何只获取文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57204092/

相关文章:

node.js - 如何让多个 Node.js 命令行进程相互通信?

MongoDB (3.0) 聚合 : Several matches vs One match with multiple items

mongodb - Mongoose model.pre ('save' ), isModified, bcrypt

javascript - 如何使用 Mongoose 检查字符串是否与数组的元素匹配

node.js - 将服务器错误消息传递给客户端(使用 Express 和 Backbone)

node.js - HTTP 错误 : 401, 请求具有无效的身份验证凭据。预期的 OAuth 2 访问 token 、登录 cookie 或其他有效的身份验证凭证

mongodb - 确保 MongoDB 以动态时间间隔使数据过期并且调用是幂等的

node.js - 使用express和mongo在mongodb中保存复杂的结构

node.js - 如何拒绝用户使用 mongoose-auth/everyauth 登录

node.js - 如何获取在nodejs中运行脚本的文件的当前路径