Mongodb:如何自动增加子文档字段?

时间:2013-11-06 17:45:08

标签: arrays mongodb mongoose

以下文件记录了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
                }
            ]
        }
     }

3 个答案:

答案 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/