无法查询子子文档

时间:2019-08-22 22:43:42

标签: node.js mongodb mongoose mongodb-query mongoose-schema

我无法访问要查询子文档的子文档,这些子文档实现了后端分页,以便可以在单独的页面中呈现它们

自从我最近发现对象是数组类型以来,我就尝试使用点表示法something.something.something甚至使用此[“ something”] [“ something”] [“ something”]数组

这是模型架构||子架构

const modelSchema = new mongoose.Schema({
  modelname: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 250
  }
});

这是自行车架构||父模式

const bikeSchema = new mongoose.Schema({
 make: {
    type: makeSchema,
    required: true
  }
})

这是将数据存储在Mongodb中的方式

 "_id" : ObjectId("5d5e13e8edcbbf038c1f9b8e"),
"make" : {
        "_id" : ObjectId("5d40f0b40268d80ac8c30973"),
        "makename" : "{ _id: 5d40f0b40268d80ac8c30973, makename: 'ducatii', __v: 0 }"
}

根据文档的预期输出,以查询makecat名称为ducatii就是这样

console.log(自行车[0] [“ make”] [“ makename”] [“ makename”])

或这个   console.log(自行车[0] .make.makename.makename)

3 个答案:

答案 0 :(得分:0)

需要注意的两件事:

  1. 如果返回的结果是MongoDB游标对象,则无法通过数组索引访问。您需要使用适当的方法从光标中检索项目。
  2. 您的第一个makename字段指向一个JSON字符串,而不是一个对象。您无法从JSON字符串访问嵌套的makename.makename。您必须先将JSON解码为对象,然后才能访问嵌套属性。

答案 1 :(得分:0)

这似乎与您存储子文档的方式有关。

例如:

bikes[0].make.makename实际上是一个字符串,不是有效的对象。您也将无法使用JSON.parse这个字符串,因为您必须用转义的双引号将每个键/值包装起来。

如果您能够正确存储此子文档,那么应该以期望的方式使用该对象!

答案 2 :(得分:0)

要将文档嵌入到文档中,您必须像下面这样

var childSchema = new Schema({ name: 'string' });

var parentSchema = new Schema({
  // Array of subdocuments
  children: [childSchema],
  // Single nested subdocuments. Caveat: single nested subdocs only work
  // in mongoose >= 4.2.0
  child: childSchema
});

您的案子

const modelSchema = new mongoose.Schema({
  makename: {
    type: String,
    required: true,
    minlength: 5,
    maxlength: 250
  }
});

const bikeSchema = new mongoose.Schema({
 make: {
    makename: modelSchema
  }
})

然后您可以像

一样访问它
console.log(bikes[0]["make"]["makename"]["makename"])