Mongoose:嵌套 Json 的模式并存储它(Node.js)

Posted

技术标签:

【中文标题】Mongoose:嵌套 Json 的模式并存储它(Node.js)【英文标题】:Mongoose: Schema for nested Json and store it (Node.js) 【发布时间】:2016-10-01 23:16:55 【问题描述】:

我对 js 和 mongoose 还很陌生,我最终得到了一个嵌套的 JSON。

var standardmessage = 
        "id": "352",
        "name": "a name",
        "type": "a type",
        "message":
            
                "messagetype": "default message",
                "timestamp": "35235326326",
                "messagestatus": "running"
            
    

现在我尝试定义一个模式:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var messageSchema  = new Schema(
    id: Number,
    name: Schema.Types.Mixed,
    type: Schema.Types.Mixed,
    message:
            
                messagetype: String,
                timestamp: Number,
                messagestatus: String
            
, collection: 'test');

var testmodel = mongoose.model('messagemodel', messageSchema,'test');

module.exports = testmodel;

最后我尝试通过 Mongoose 将它存储到 MongoDB 中:

var Message = new testmodel(standardmessage);
                Message.save(function (err) 
                if (err) console.log(err);
                );

要么我的架构错误,我需要多个架构来正确存储它,要么……否则是错误的。但在我的数据库中,它只能这样存储:

"_id" : ObjectID("xxxxxxxxxxx"), "__v" : 0

是否可以定义一个 Schema 来存储这个嵌套的 JSON?如果是,如何? 如果没有,我该如何正确存储它?

为什么只存储一个ObjectID?

在此先感谢,感谢各种帮助,如果我的问题像我一样愚蠢,我深表歉意。

更新:

    var messageSchema  = new Schema(
      id: Number,
      name: Schema.Types.Mixed,
      type: Schema.Types.Mixed,
      message: [message]

     , collection: 'test');


    var message = new Schema(
    "messagetype": "default message",
     "timestamp": "35235326326",
     "messagestatus": "running"
     )

然后它像这样存储 "_id" : ObjectID("xxxxxxxxxxx"), "message" : [], "__v" : 0

【问题讨论】:

请在(标准消息)字段中显示您的数据 使用您提供的示例,我得到了它的工作。我只需要从 'var Message = new testmodel(standardmessage);'中删除 那不是真的 【参考方案1】:

对于嵌套的 JSON,您可以执行以下操作:

var mongoose =require('mongoose');
var Schema = mongoose.Schema;

var standardmessage = new Schema(
  id: Number,
  name: String,
  type: String,
  message: 
    messageType: String,
    timestamp: Number,
    messagestatus: String
  
);

如果嵌套块是一个列表,那么你可以这样做:

var mongoose =require('mongoose');
var Schema = mongoose.Schema;

var msg = new Schema(
  messageType: String,
  timestamp: Number,
  messagestatus: String
);

var standardmessage = new Schema(
  id: Number,
  name: String,
  type: String,
  message: [msg]
);

【讨论】:

以上是关于Mongoose:嵌套 Json 的模式并存储它(Node.js)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Mongoose 将嵌套的 JSON 数组存储到 MongoDB

嵌套数组 JSON 的 Mongoose 模型

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

使用 JSON-Schema 定义模式并使用 Mongoose?

用于存储子文档的 JSON 对象数组的 Mongoose 模式

mongoose基本操作