我是MongoDB的新手。这是我的问题:用户可以有多个头像,但只有一个是活动的。以下是用户文档目前的样子:
{
"_id": ObjectId("515c99f7e4d8094a87e13757"),
"avatars": [{
"url": "http://example.com/img/photo1.jpg",
"width": 50,
"height": 50,
}, {
"active": true,
"url": "http://example.com/img/photo2.jpg",
"width": 50,
"height": 50,
}]
}
这个解决方案很简单,但有一些我不喜欢的东西:
另一种解决方案是:
{
"_id": ObjectId("515c99f7e4d8094a87e13757"),
"active_avatar_id": 2,
"avatars": [{
"_id": 1,
"url": "http://example.com/img/photo1.jpg",
"width": 50,
"height": 50,
}, {
"_id": 2,
"url": "http://example.com/img/photo2.jpg",
"width": 50,
"height": 50,
}]
}
这解决了问题1和2,但没有问题3.它在每个嵌入式文档中添加了额外的_id
字段。另外,当我插入一个新的头像时,我现在需要知道下一个_id
要使用的是什么(除非我使用了objectId,但它只是一个12字节的id,只有几百个头像(最大)。
所以另一种解决方案可能就是这样:
{
"_id": ObjectId("515c99f7e4d8094a87e13757"),
"active_avatar": {
"url": "http://example.com/img/photo2.jpg",
"width": 50,
"height": 50,
},
"extra_avatars": [{
"url": "http://example.com/img/photo1.jpg",
"width": 50,
"height": 50,
}]
}
没有比第一个解决方案好多了(它只是解决问题#3,就是这样,而且它更加丑陋)。
所有这些解决方案都有效,但我正在寻找“正确的方法”。有任何想法吗?如果我允许用户拥有多个活动头像(无论这意味着什么)该怎么办?
感谢。
答案 0 :(得分:1)
您是否考虑过文档模型中的文档?
{
"_id" : ObjectId("515c99f7e4d8094a87e13758"),
"active_avatar_id" : 2,
"avatars" : {
"1" : {
"url" : "http://example.com/img/photo1.jpg",
"width" : 50,
"height" : 50
},
"2" : {
"url" : "http://example.com/img/photo2.jpg",
"width" : 50,
"height" : 50
}
}
}