【问题标题】:NodeJS gives MongoDB data with missing values and an unexpected $db fieldNodeJS 为 MongoDB 数据提供了缺失值和意外的 $db 字段
【发布时间】:2018-02-12 12:49:43
【问题描述】:

我有一个简单的 NodeJS 应用程序,它运行一个 http 服务器,它从 MongoDB 实例收集数据并将结果显示为 JSON:

db.collection(collectionName).findOne({ '_id': id }, function (err, result) {
        if (err) {
            reportError(err, res);
            return;
        } else {
            outPut(result, res);
        }
});

在输出函数中,我在“结果”变量上调用 JSON.stringify() 并将其写入响应中。 然而,大部分数据都丢失了,并且从某个地方包含了一个空的 $db 对象。这是数据的一个子集:

"Kommun":1292,
"Lansdel":28,
"Delyta":[
   {
     "$id":"2",
     "$db":""
   },
   {
      "$ref":"691"
   },
   {
      "$ref":"247"
   }

使用 Studio 3T 查看记录,似乎我期望的所有数据都已保存。

为什么我没有在 JSON 对象中获取所有数据? $db 来自哪里?这是什么?

【问题讨论】:

  • 如果你只是 console.log(result) 呢?
  • 返回:Delyta: [ DBRef { _bsontype: 'DBRef', namespace: undefined, oid: '2', db: undefined }, { '$ref': '22' } ],
  • 您使用本机驱动程序而不是 Mongoose 的任何特殊原因?
  • 好吧,因为我只是保存和加载记录,我认为我不需要更复杂的功能。 Mongoose 会以某种方式解决这个问题吗?
  • 保存和加载记录基本上是 Mongo 所做的 :) 是的,Mongoose 使它变得更容易和更严格(使用数据模型)

标签: json node.js mongodb


【解决方案1】:

我猜你是using DBRefs。为了包含来自不同集合的引用数据,您必须自己查询这些数据。如果没有有关数据架构的更多信息,我无法向您展示代码示例。

【讨论】:

  • 这可能是它。我从另一个系统获取原始 JSON 对象并将其缓存在 MongoDB 中。所有数据都存在于单个 json 对象中,但为了处理各种交叉引用,它们似乎使用了 $ref 和 $id。那么,这不可能像这样正确存储吗?我必须将其保存为字符串吗?
  • 也许更清楚一点:存储的 JSON 对象具有循环引用 - 由 $ref 和 $id 对表示。虽然 MongoDb 似乎很乐意根据对象保存记录,但它并没有正确返回。
猜你喜欢
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 2020-10-07
相关资源
最近更新 更多