我的收藏版本代表了应用程序的版本:
{
application_id: ObjectId(42),
version: "1.2",
price: 1.000000
}
在我的数据库中,我已经插入了400k文档,我有10k个新文档(有些可能已经在数据库中,其他没有),我想检索已经插入的所有文档以获取进一步计算的id,以及然后只插入新文档。
**编辑
更确切地说,这是我正在做的算法:
希望更清楚
**结束编辑
所以我做了一个OR请求:
{
"$or":[
{
"application_id": 12,
"version": "1.2"
},
{
"application_id": 13,
"version": "2.6"
},
.... for 10k
]
}
当我没有索引时,我会在几分钟(5或6)内收到回复,所以我决定设置一个索引来改进它:
db.Version.ensureIndex({"application_id":1,"version":1})
我重新索引集合,但计算时间最差!我在10分钟后停了下来......
所以我的问题是你认为提出OR请求是个好主意,还是应该将其拆分为10k简单请求,如果OR请求是个好主意我的索引有什么问题?
答案 0 :(得分:2)
男人,10,000 $or
你真的需要这么多吗?这必须接近BSON最大尺寸。
您执行查询的方案尚不清楚,因此我目前无法推荐更好的方法。但是,应用程序版本控制通常可以比这更好。
关于你的问题:
所以我的问题是你认为提出OR请求是个好主意
可能不是。在这种情况下,MongoDB必须像地狱一样合并,这可能需要花费很长时间。
或者我应该将其拆分为10k简单请求,如果OR请求是个好主意我的索引有什么问题?
你的索引看起来应该覆盖,所以这不是问题。
如果您真的必须执行此查询,您可能最好延迟加载页面(我假设网站在这里)和分段查询。 10,000是在很短的时间内发送到服务器的很多查询。
因此,例如,在大约10个版本之后,Github上的版本控制被截断,您必须单击Ajax链接才能获得另外10个版本。