【问题标题】:Can't see a JSON field in GET response (mongoose)在 GET 响应中看不到 JSON 字段(猫鼬)
【发布时间】:2016-03-19 17:05:26
【问题描述】:

我有这个 JSON 文档(见 mongolab):

{
    "_id": {
        "$oid": "566e8673eb862d165fef7171"
    },
    "street": "Dizingof",
    "buildingNumber": 33,
    "apartmentNumber": 63,
    "beds": 3,
    "owner": {
        "_id": {
            "$oid": "564374944cb813541afc193a"
        },
        "local": {
            "password": "$2a$08$PtZrvLY7MWSi44gMDSjLJ.u4x.IOXIkRFZYfQhAwt.5vSIXpCYjX6",
            "email": "someemail@gmail.com"
        },
        "__v": 0
    }
}

其架构中的owner字段定义为:

owner           :  {
                type: Schema.ObjectId,
                ref: 'User'
        }

当我执行http.get 以获取我收到的列表时:

{
  "_id": "566e8673eb862d165fef7171",
  "street": "Dizingof",
  "buildingNumber": 33,
  "apartmentNumber": 63,
  "beds": 3,
  "imagesAndCount": [],
  "UsersAndQuestions": []
}

为什么我看不到/使用 owner 字段?我需要它来处理我的 HTML 文档。

编辑:这是routes.js中的相关GET:

app.get('/api/listing/:street/:buildingNumber/:apartmentNumber', function (req, res) {
        Listing.findOne(
            {
                "street": req.params.street,
                "buildingNumber": req.params.buildingNumber,
                "apartmentNumber": req.params.apartmentNumber
            }
            , function (err, listing) {
                if (err) { return next(err); }
                res.json(listing);
            });
    });

另外,我通过这样做填充了owner 字段:

var myUser = db.users.findOne()
db.listings.insert({"street" : "Dizingof", "buildingNumber" : 33, "apartmentNumber" : 63, "beds": 3, "owner": myUser})

【问题讨论】:

  • 你能显示你正在做的查询吗?
  • @Alex 我正在使用 POSTMAN 进行查询:localhost:3000/api/listing/Dizingof/33/63
  • 不,我的意思是您对 mongodb 的查询。你已经标记了 mongoose,所以你必须在某处查询 mongodb
  • 谢谢 - 你如何填充这些数据?您已在架构中将 owner 的类型设置为 ref,但这看起来您已将其他数据注入该字段?
  • @Alex 再次编辑了我的帖子

标签: javascript angularjs json mongodb mongoose


【解决方案1】:

你的问题是这样的

owner :{
    type: Schema.ObjectId,
    ref: 'User'
}

Mongoose 期望引用一个文档,然后使用 populate 进行水合(顺便说一句,它仅适用于类型数组)因此不会将其作为查询的一部分返回。

假设您使用的是 4.2 的 mongoose,您可以执行以下操作:

http://mongoosejs.com/docs/subdocs.html#altsyntax

var ownerSchema= new Schema({ name: 'string', otherProperty: 'string' });

var parentSchema = new Schema({
  owner: ownerSchema
});

【讨论】:

  • 谢谢,我尝试定义“所有者:[用户]”但我仍然在我的 GET 响应 JSON 中得到一个空数组......我怎么能真正得到一个用户对象?
  • 您现在指定了一个数组,但存储了一个对象......它必须是一个或另一个。
  • 另外,您是将 User 对象存储为嵌入文档,还是存储在其自己的集合中?
  • 当我尝试 : owner : User 它给了我一个错误:TypeError: Undefined type at owner
  • 我只想将它作为“硬编码”对象,即使该特定用户已更新,以后也不需要更改
猜你喜欢
  • 2017-08-26
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2014-05-29
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多