我不太熟悉蒙戈,所以请原谅我的无知!
我想为每个用户添加一个seenMessages对象,以确定用户是否阅读了哪些消息,这取决于消息唯一ID的存在(或不存在),类似于:
//用户对象中的键
seenMessages: {
i3d4Fh87: 'i3d4Fh87',
hfy7FDE9: 'hfy7FDE9',
}
这个想法是检查该键的对象,如果无法定位,则将消息视为“未看到”。查看消息后,消息ID将被添加到seenMessages对象中,此时它将被视为“看到”。
有没有办法在Mongo中实现这一点?即在更新阶段以及只是创建一个字段作为空对象,Schema. Types.混合似乎只是生成一个包含null的数组。
我会使用数组来存储消息而不是对象。Mongo有大量处理数组的运算符,添加多键索引将使这些操作更快
db. myColl.update(query,{$addToSet:"seenMessages":message ageId}})
(只要命名字段不存在,mongo将其创建为数组)user. seenMessages
上有一个索引来使查询变得快捷我知道这并不能完全回答最初的问题,但是在对象中使用任意键是一种模式,mongo没有很好的工具来支持。有关更多详细信息,请参阅MongoDB查询帮助-对子对象中任何键的值进行查询
他是对的,如果我有代表,我会投他的票。如果你用对象来完成这个,你可以在@wilis帖子的最后一个链接中的方法中完成,但是在数组上使用findOne并在读取时推高id会更容易,例如,值不会在checkIfRead:{type: Array}
中,直到它与findOneAndUpdate方法放在那里。如果findOne因为不存在而没有结果,你可以放入任何你想要的逻辑。