我是MongoDB的新手,我不是如何最好地解决我相当基本的问题。
我的数据库中有一个“表情符号”文档集。在任何给定时间,都有一个(并且只有一个)“选定的”表情符号文档。这由应用程序确定和更新。如何将选择哪一个的信息保存到数据库中?
方法1: 添加一个新的Collection来保存表情符号集合的这种元数据?我认为它将包含一个文档,其中包含对当前所选表情符号文档的引用。这似乎伤害了OO设计。整个集合,包含单个文档,用于保存单个属性。但它确实可以灵活地添加更多元数据。
方法2: 为每个表情符号文档添加一个新的布尔字段,指示它是否是当前选定的表情符号。这似乎是为每个Document跟踪的大量额外信息,只有一个应该具有真值。我也会关注保持一致性。
我知道我不是第一个遇到这个问题的人,但我找不到解决方案,这是一般情况。谢谢!
答案 0 :(得分:0)
MongoDB是无模式的,因此您只需将布尔字段添加到当前选定的表情符号中,并在选择更改时将其删除。您应该添加一个解析唯一索引,以便更快地查询此字段。您可以使用以下语法设置字段:
db.emojis.update({name:"b"},{$set:{selected:true}})
简单地解开它:
db.emojis.update({name:"b"},{$unset:{selected:""}})
您可以创建以下解析唯一索引,以确保只有一个字段selected:true
db.emojis.createIndex( { selected: 1 } , { sparse: true, unique: true } )