Tho*_*sen 7 c# mongodb mongodb-query
我有一个查找查询,我需要检查文档的数组中是否有任何元素。我想索引数组的大小以优化查询,但我不确定如何创建这样的索引。
我已经通过 MongoDB C# 驱动程序创建了过滤器:
Builders<Post>.Filter.And(new List<FilterDefinition<Post>>()
{
Builders<Post>.Filter.Eq(x => x.Category, Category.COLLECTION),
Builders<Post>.Filter.SizeGt(x => x.Details.References, 0)
})
Run Code Online (Sandbox Code Playgroud)
文档类型如下所示:
{
"_id" : ObjectId("577a271f2b365917c4d72678"),
"UserId" : ObjectId("577a26a32b365917c4d67e42"),
"Category" : NumberInt(4),
"Details" : {
"_id" : ObjectId("577a271f2b365917c4d72677"),
"References" : [
{
"RefId" : ObjectId("577a887b4fd1ae0e1c7b2035"),
"Order" : NumberInt(0),
"RefType" : NumberInt(1)
}
]
},
"Modified" : ISODate("2016-07-05T01:26:33.549+0000"),
"IsActive" : true
}
Run Code Online (Sandbox Code Playgroud)
查询如下所示:
{
????"query" : {
????????"find" : "post",
????????"filter" : {
????????????"UserId" : {
????????????????"$in" : [
????????????????????ObjectId("577a26a12b365917c4d67dd5"),
ObjectId("577a26a12b365917c4d67dd3")
????????????????]
????????????},
????????????"IsActive" : true,
????????????"$or" : [
????????????????{
????????????????????"Category" : NumberInt(4),
????????????????????"UserId" : {
????????????????????????"$nin" : [
????????????????????????]
????????????????????},
????????????????????"Details.References.0" : {
????????????????????????"$exists" : true
????????????????????}
????????????????},
????????????????{
????????????????????"Category" : {
????????????????????????"$ne" : NumberInt(4)
????????????????????}
????????????????}
????????????],
????????????"Modified" : {
????????????????"$lt" : ISODate("2016-07-04T13:59:32.094+0000")
????????????}
????????},
????????"sort" : {
????????????"Modified" : NumberInt(-1)
????????},
????????"limit" : NumberInt(10)
????},
????"time" : NumberInt(33),
????"docsScanned" : NumberInt(1125)
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它会扫描相当多的文档 (1125) 以找到正确的文档。我想进一步减少这个数字,但我不确定如何索引这部分:
"Details.References.0" : {
"$exists" : true
}
Run Code Online (Sandbox Code Playgroud)
如何为参考文献的长度创建索引?
Mongo 索引还没有提供这样的功能。
要存储数组的大小 - 作为一种解决方案,您可以拥有字段 arraySize 并在该数组的每次更改时手动更新它,然后在 arraySize 上创建字段索引。
归档时间: |
|
查看次数: |
1774 次 |
最近记录: |