node.js - Mongo DB 文档只返回 "_id" "$oid"

标签 node.js mongodb mongoose

我正在尝试使用 MEAN 堆栈的非常简单的 CRUD API。我将几个文档输入到 mongolab 沙箱数据库中。我可以对所有文档执行 GET,它们都会被返回。然后我通过ID测试GET:

router.route('/api/v1/resources/:resource_id')

// get the resource with that id (accessed at GET http://localhost:8080/api/resources/:resource_id)
.get(function(req, res) {
    Resource.findById(req.params.resource_id, function(err, resources) {
        if (err)
            res.send(err);
        res.json(resources);
    });
});

而且它根本行不通。我一直空着。但文件存在。当我对所有文档执行 GET 时,我可以看到它。

然后我终于得到了另一个文件要返回。

区别是什么?返回的记录具有以下格式的 ID:

{
  "_id": { "$oid":"1234567890abc"}
}

但是没有返回的记录是这样的:

{
   "_id": "1234567890abc"
}

谁能给我解释一下?我使用 Postman 输入数据,并且我在条目之间没有做任何不同的事情。

什么是$oid? 是什么创建了 $oid? 为什么嵌套对 mongoose 的 findById() 很重要?

谢谢!

最佳答案

$oid 来自 Strict MongoDB Extended JSON .

您对包含 _id 条件的 MongoDB 数据库的所有查询都应将 _id 包装在 ObjectId 函数中,如下所示:

db.resources.findOne({_id: ObjectId("507c35dd8fada716c89d0013")}; 

MongoLab 提供了通过 JSON 语法查询 MongoDB 的 UI。但由于规范限制,您不能在 JSON 中使用 ObjectId

因此,MongoLab 使用 Strict MongoDB Extended JSON 作为别名 ObjectId() -> $oid

{"_id": {"$oid":"507c35dd8fada716c89d0013"})

您在输出中看到的相同 $oid 因为 MongoLab UI 也使用 JSON。

Mongoose 自动将字符串 _id 转换为 MongoDB 查询,因此您无需手动执行此操作。以下查询是等效的:

Resource.findById("507c35dd8fada716c89d0013");
Resource.findById(new mongoose.Types.ObjectId("507c35dd8fada716c89d0013"));

关于node.js - Mongo DB 文档只返回 "_id" "$oid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32028468/

相关文章:

javascript - 如何注销 ipcRenderer.on 事件监听器?

mongodb - CloudFoundry mongoDb访问权限

mongodb - Fluentd-ui:我是否可以从Fiorion OrionContextbroker接收/捕获推送到mongoDB的数据?

javascript - MongoDB/Mongoose 查询生成器

mongodb - 神秘的 mongodb 错误 LEFT_SUBFIELD 仅支持对象 : stats not: 6

node.js - 安装cordova和ionic,错误: ECONNRESET,没有解决方案

javascript - 每个月与一周中正确的日子对齐?

javascript - 如何使 create-react-app 自动构建?

javascript - 如何使用 Node.js MongoDB 驱动程序插入 long/BigInt?

javascript - Nodejs循环遍历字符串并以自动递增长度保存到mongodb中