gpt4 book ai didi

mongodb - 在 Mongo 中使用唯一键创建 seenMessages 对象

转载 作者:可可西里 更新时间:2023-11-01 10:08:46 24 4
gpt4 key购买 nike

我对 Mongo 不是很熟悉,所以请原谅这里的任何无知!

我想向每个用户添加一个 seenMessages 对象,以确定用户已阅读或未阅读的消息,由消息的唯一 ID 的存在(或不存在)决定,类似于:

//用户对象中的键

seenMessages: {
i3d4Fh87: 'i3d4Fh87',
hfy7FDE9: 'hfy7FDE9',
}

想法是检查该对象的那个键,如果无法定位,则该消息被认为是“看不见的”。查看消息后,消息 ID 将添加到 seenMessages 对象,此时它将被视为“已读”。

有没有办法在 Mongo 中实现这一点?即在更新阶段以及仅将字段创建为空对象时,Schema.Types.Mixed 似乎只生成一个包含 null 的数组。

最佳答案

我会使用数组而不是对象来存储消息。 Mongo 有一吨 operators that work on arrays并添加 multikey index将使这些操作快速

  • 要添加看不见的消息,您可以执行类似 db.myColl.update(query, {$addToSet: "seenMessages": messageId}}) 的操作(只要命名字段没有'已经存在,mongo 将把它创建为一个数组)
  • 要将消息标记为已读,您可以使用 $pull -- https://docs.mongodb.com/manual/reference/operator/update/pull/
  • 如果你想查询没有看到消息的用户,你可以在 user.seenMessages 上有一个索引来使查询变得快速

我知道这并不能完全回答最初的问题,但是在对象中使用任意键是一种模式,mongo 没有很好的工具来支持。参见 MongoDB Query Help - query on values of any key in a sub-object了解更多详情

关于mongodb - 在 Mongo 中使用唯一键创建 seenMessages 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com