mongodb - 动态子字段的 MongoDB 索引
问题描述
MongoDB 3.0.2。文档示例:
{ "_id" : NumberLong(1), Categories : { "123" : { "Shows" : NumberLong(7), "Clicks" : NumberLong(0) }, "221" : { "Shows" : NumberLong(33), "Clicks" : NumberLong(12) } } }
{ "_id" : NumberLong(2), Categories : { "221" : { "Shows" : NumberLong(33), "Clicks" : NumberLong(12) } } }
{ "_id" : NumberLong(3), Categories : { "123" : { "Shows" : NumberLong(8), "Clicks" : NumberLong(1) } } }
{ "_id" : NumberLong(4), Categories : { "99" : { "Shows" : NumberLong(144), "Clicks" : NumberLong(39) }, "221" : { "Shows" : NumberLong(52), "Clicks" : NumberLong(2) } } }
{ "_id" : NumberLong(5), Categories : { "95" : { "Shows" : NumberLong(18), "Clicks" : NumberLong(3) } } }
{ "_id" : NumberLong(6), Categories : { "123" : { "Shows" : NumberLong(89), "Clicks" : NumberLong(69) } } }
在我的例子中,像“123”、“221”、“99”、“95”这样的字符串值是一些类别的id。我只需要使用类别 ID按节目排序:
db.myCollection.find().sort( Categories."1".Shows : -1 )
db.myCollection.find().sort( Categories."95".Shows : 1 )
db.myCollection.find().sort( Categories."123".Shows : 1 )
db.myCollection.find().sort( Categories."221".Shows : -1 )
但是这个类别的数量大约是 250+。我不能为每个设置索引,例如:
db.myCollection.createIndex( { Categories."[1..250]".Shows : 1 } );
因为 cat id 超过 64(MongoDB 限制),并且这个类别可以添加和删除到一些记录,这个过程是动态的。
没有索引我得到:
在..
有人可以为这种情况提供解决方案吗?
解决方案
使用稍微修改过的 dnickless 架构版本,如下所示: { “_id”:1, “类别”:[ { "CategoryId": "123", “节目”:7, “点击次数”:0 }, { "CategoryId": "221", “节目”:33, “点击次数”:12 } ] } 然后,您可以为节目创建索引。 db.collection.createIndex({"Categories.Shows": 1})
推荐阅读
- python-3.x - 将元音转换为整数,将整数转换为元音
- expo - Expo App 在生产中找不到任何 OTA 更新?
- sharepoint - 使用 Microsoft Graph API 从 SharePoint Online 获取文件
- mongodb - mongodb聚合比较文档,我不想显示不兼容的
- java - 映射中的线程安全写入
- arrays - 在 TypeScript 中使用数组映射方法
- mysql - mysql select union with limit使用了两次
- javascript - 在 Fetch 期间显示加载进度
- macos - VideoToolbox 硬件编码器帧延迟
- javascript - 使用 URL 映射对象以返回对象