Mongoose:保存具有不同模式的嵌套 JSON

Posted

技术标签:

【中文标题】Mongoose:保存具有不同模式的嵌套 JSON【英文标题】:Mongoose: Save a nested JSON with different Schemas 【发布时间】:2016-03-22 21:38:19 【问题描述】:

每个人。我想保存具有多个级别的 JSON 文档,例如,我有一个嵌套的 JSON,其元素级别如下:

   
 "created":"2015-11-10 15:47:41.107Z",
 "id_user" : "01",
 "version" : "1"
 "record" : 
    "name" : "Carl Powers",
    "reference" : [ "url" : "www.test.com", "created" : "2015-11-10 15:47:41.107Z"] 
 

我想保存这个 JSON,对每个元素使用不同的架构,因为我想要在我的 MongoDB 中使用不同的集合,我不想要带有嵌入元素的架构。

var ElementSchema = new Schema(
 created : type: Date, default: Date.now,
 id_user : String,
 version :  type: Number, min: 0 ,
 record : type: Schema.Types.ObjectId, ref: 'recordSchema'
);

var recordSchema = new Schema(
    name : String,
    reference : [type: Schema.Types.ObjectId, ref: 'referenceSchema']
);

var referenceSchema = new Schema(
    url : String,
    created : type: Date, default: Date.now
  );

可以使用 mongoose 一次性保存我的示例 JSON。有必要放每个元素的id吗?在这种情况下,一旦收到 JSON,生成每个 id 以及如何放入每个元素的最佳方法是什么?

【问题讨论】:

【参考方案1】:

这可以使用子文档来解决,这里有一个例子:

var referenceSchema= new Schema(
    url : String,
    created : type: Date, default: Date.now
);

var recordSchema = new Schema(
    name : String,
    reference :  type: [referenceSchema]
);

var ElementSchema = new Schema(
 created : type: Date, default: Date.now,
 id_user : mongoose.Schema.ObjectId,
 version :  type: Number, min: 0 ,
 record :  type: recordSchema 
);

要保存带有子文档的元素文档:

var element = new ElementSchema(
   created: 'date',
   id_user: 'user-id',
   version: 2
   record: 
      name: 'name',
      reference: [
         url: 'url1',
         created: 'date1'
      , 
         url: 'url2',
         created: 'date2'
      ]
   
);

Here's the documentation for more queries for sub-documents:

【讨论】:

以上是关于Mongoose:保存具有不同模式的嵌套 JSON的主要内容,如果未能解决你的问题,请参考以下文章

嵌套对象的模式/解析 graphql/mongoose

如何使用 mongoose 填充具有无限嵌套级别的文档

使用没有数组的嵌套文档为我的 JSON 定义有效的猫鼬模式?

mongoose 怎么插入嵌套数组

如何填充嵌套的 Mongoose 嵌入文档

将 oneOf 嵌套在任何 JSON 模式中