【问题标题】:Nested arrays in MongooseMongoose 中的嵌套数组
【发布时间】:2012-07-05 17:23:00
【问题描述】:

在我正在处理的集合中,一个文档如下所示:

{
    name: 'Myname',
    other: 'other',
    stuff: [
        ['something', 12, 4, 'somethingelse'],
        ['morestuff', 2, 4, 8],
        ['finally', 12, 'again', 58],

    ]
}

我编写了这个 Mongoose 架构来访问它:

var MyDocSchema = new Schema({
    name: String,
    other: String,
    stuff: [],
});

当我查询文档时,一切正常,控制台中显示的输出是正确的。但是,当我尝试执行 console.log(myDoc.stuff) 时,我得到了以下信息:

['something', 12, 4, 'somethingelse', 'morestuff', 2, 4, 8, 'finally', 12, 'again', 58]

而不是

[
    ['something', 12, 4, 'somethingelse'],
    ['morestuff', 2, 4, 8],
    ['finally', 12, 'again', 58],

]

我做错了什么?谢谢你的帮助!!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    免责声明:此回复已过时,2012 年!它可能不是最准确的。

    来自猫鼬文档。

    http://mongoosejs.com/docs/schematypes.html:向下滚动到数组部分:

    注意:指定一个空数组等同于[Mixed]。这 下面全部创建Mixed的数组。

    关于这意味着什么的详细信息在数组部分正上方的混合部分中。

    这是你需要做的。

    为嵌入的文档定义一个模式:

    var Stuff = new Schema({
      name: String,
      value1: Number,
      ...
    });
    

    使用它而不是空数组[]

    var MyDocSchema = new Schema({
      name: String,
      other: String,
      stuff: [Stuff],
    });
    

    【讨论】:

    • 是的,它可以这样工作,谢谢你的帮助。但是,我昨天也意识到,尽管控制台输出看起来不对,但它可以正常工作。我可以遍历 myDoc.stuff 和 console.log(myDoc.stuff[0]) 将按预期输出 ['something', 12, 4, 'somethingelse'] ...
    • 这可行,但不是一个好习惯。 Mongoose 模式是在文档级别访问数据的包装器。模式“Stuff”将具有“保存”和“更新”等方法,这些方法不会以这种方式工作,而是保存在其自己的文档级别。如果我错了,请纠正我,因为我宁愿在这件事上错。
    • 我很感兴趣人们对 Jason Sebring 对这里使用子模式的看法。
    • 我同意,这似乎不是正确的方法,至少对我而言。更新方法没有按我需要的方式工作。我需要一个包含数字的数组。
    • 我还可以通过ref 包含架构吗?喜欢:stuff: [{ type: Schema.Types.ObjectId, ref: 'OtherStuff' }]?
    猜你喜欢
    • 2015-03-26
    • 2017-01-24
    • 2017-09-26
    • 2019-12-06
    • 2019-07-19
    • 2017-07-05
    • 2020-11-28
    相关资源
    最近更新 更多