简体   繁体   中英

Mongoose: Schema for nested Json and store it (Node.js)

I'm pretty new to js and mongoose and I've ended up with a nested JSON.

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

Now I tried to define a schema:

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;

Finally I tried to store it through Mongoose into MongoDB:

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

Either my schema is wrong and i need multiple schemas to store it correctly or sth. else is wrong. But in my database it only get's stored like this:

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

Is it possible to define one Schema to store this nested JSON? If yes, how? If not, how do I manage to store it correctly?

Why does it only store an ObjectID?

Thanks in advance, appreciating every kind of help and sorry if my question is stupid as im new to this.

Update:

    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"
     })

Then it gets stored like this { "_id" : ObjectID("xxxxxxxxxxx"), "message" : [], "__v" : 0}

For a nested JSON, you can do something like this:

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
  }
});

If the nested block is a list then you can do this:

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]
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM