如何在mongoDB对象中添加唯一的自动增量ID

时间:2016-11-01 07:05:49

标签: mongodb

我有一个表用户。这是架构。

        {
    "_id": "5816f4fad0be79f809519f98",
    "user": {
    "_id": "57400c32bd07906c1308e2cf",
    "displayName": "mani selvam"
    },
    "__v": 0,
    "created": "2016-10-31T07:38:34.999Z",
    "remarks": "-",
    "status": "pending",
    "amt": "1925.10",
    "cheque_currency": "Rs",
    "cheque_value": "300",
    "amount_payment": "1,925.10",
    "debitnote_no_payment": "3",
    "supplier_name": "karikalan",
    "buyer_name": "Manidesigns"
    },

    {
    "_id": "5816f4fad0be79f809519f98",
    "user": {
    "_id": "57400c32bd07906c1308e2cf",
    "displayName": "mani selvam"
    },
    "__v": 0,
    "created": "2016-10-31T07:38:34.999Z",
    "remarks": "-",
    "status": "pending",
    "amt": "1925.10",
    "cheque_currency": "Rs",
    "cheque_value": "300",
    "amount_payment": "1,925.10",
    "debitnote_no_payment": "3",
    "supplier_name": "karikalan",
    "buyer_name": "Manidesigns"
    },

  {
"_id": "5816f4fad0be79f809519f98",
"user": {
"_id": "57400c32bd07906c1308e2cf",
"displayName": "mani selvam"
},
"__v": 0,
"created": "2016-10-31T07:38:34.999Z",
"remarks": "-",
"status": "pending",
"amt": "1925.10",
"cheque_currency": "Rs",
"cheque_value": "300",
"amount_payment": "",
"debitnote_no_payment": "3",
"supplier_name": "karikalan",
"buyer_name": "Manidesigns"
},

msges是对象。但我想要的是在msges中有键值对。所以我做的是

var usersSchema = mongoose.Schema({
  uname : {type : String , unique: true},
  email : {type : String},
  logintype : {type : String},
  password : String,
  status : String,
  hash : String,
  social: {},
  games: Object,
  os: String,
  friends: Object,
  msges:Object
});

我试图让'时间'成为关键并保持其价值。但是发生了什么,而不是时间的价值,字符串“时间”出现。我可以制作自动增量密钥吗?谢谢你提前。

1 个答案:

答案 0 :(得分:1)

你定义" msgs"作为一个对象,但我从你的问题中读到的是你想要一个对象数组..

为什么不为邮件创建模型并制作make" msgs"对该对象的引用数组。

var usersSchema = mongoose.Schema({
  uname : {type : String , unique: true},
  email : {type : String},
  logintype : {type : String},
  password : String,
  status : String,
  hash : String,
  social: {},
  games: Object,
  os: String,
  friends: Object,
  msges: [{
      message_id : { type: Schema.Types.ObjectId, ref: 'Message' },
      read_on : Boolean }]
});

以及消息的架构

var messageSchema = Schema({
  from : String,
  title: String,
  msg : String,
  send_on : Date
});

var Message  = mongoose.model('Message', messageSchema);

这样,所有邮件都在一个集合中,您可以跟踪每个用户的阅读状态。

要在用户重审期间检索邮件,您可以使用mongoose populate

更新: 如果您不想要xtra集合,请将您的用户架构设置为:

var usersSchema = mongoose.Schema({
      uname : {type : String , unique: true},
      email : {type : String},
      logintype : {type : String},
      password : String,
      status : String,
      hash : String,
      social: {},
      games: Object,
      os: String,
      friends: Object,
      msges: [{
          id : Schema.Types.ObjectId,
          from : String,
          title: String,
          msg : String,
          send_on : Date,
          read_on : Boolean }]
    });

但请记住,如果您还希望消息与发送它的用户一起出现,则需要由两个用户将其放入数组中(保持ID相等)....所以你应该思考/谈论您方案中的最佳解决方案。