3

以下文件记录了米尔豪斯和巴特之间的对话。我想在唯一操作中插入一条具有正确 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
                }
            ]
        }
     }
4

3 回答 3

1

在 MongoDB 中,数组保持它们的顺序,因此通过添加num属性,您只会为无需额外字段即可完成的任务创建更多数据。只需使用数组中的位置来完成同样的事情。在数组中抓取 X 消息将提供比搜索更快的搜索{ num: X }

为了保持顺序,我认为除了在插入新子文档和 increment 之前添加类别之外num没有简单的方法。find()conversation.last_msglast_msg

根据您需要保留订单的内容,您可能会考虑在子文档中包含时间戳,该时间戳通常保存在对话记录中,并且可能提供其他有用的信息。

另外,我没有使用它,但是有一个 Mongoose 插件可能会也可能不会做你想做的事:https ://npmjs.org/package/mongoose-auto-increment

于 2013-11-06T18:06:36.543 回答
0

您不能创建自动增量字段,但可以使用函数来生成和管理序列: http ://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/ </p>

于 2013-11-09T06:48:57.340 回答
-1

我建议使用时间戳而不是数值。通过使用时间戳,您可以保持子文档的顺序并以其他方式使用它。

于 2013-11-08T08:54:00.570 回答