以下文件记录了Milhouse和Bart之间的对话。我想在一个独特的操作中插入一个带有正确num的新消息(示例中的下一个将是3)。这可能吗?
{ user_a:"Bart",
user_b:"Milhouse",
conversation:{
last_msg:2,
messages:[
{ from:"Bart",
msg:"Hello"
num:1
},
{ from:"Milhouse",
msg:"Wanna go out ?"
num:2
}
]
}
}
答案 0 :(得分:1)
在MongoDB中,数组保持其顺序,因此通过添加num
属性,您只需为没有附加字段即可完成的内容创建更多数据。只需使用数组中的位置即可完成相同的操作。在数组中抓取X消息将提供比搜索{ num: X }
更快的搜索。
为了保持顺序,在插入新的子文档并增加{{{{}}}之前,除了在num
上执行find()
之外,我认为没有一种简单的方法可以添加conversation.last_msg
类别1}}。
根据您需要保留的顺序,您可以考虑在子文档中包含一个时间戳,该时间戳通常保存在对话记录中,并可能提供其他有用的信息。
此外,我还没有使用它,但有一个Mongoose插件可能会或可能不会做你想要的:https://npmjs.org/package/mongoose-auto-increment
答案 1 :(得分:0)
我建议使用时间戳而不是数值。通过使用时间戳,您可以保留子文档的顺序并对其进行其他使用。
答案 2 :(得分:0)
您无法创建自动增量字段,但可以使用函数生成和管理序列: http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/