MongoDB 计数部分索引的项目
MongoDB count partially indexed items
我有一个集合的部分索引,看起来有点像这样:
{ // Fields
"Name" : 1
}
{ // Options
"unique" : true,
"name" : "Name_1",
"partialFilterExpression" : {
"IsArchived" : {
"$eq" : true
}
}
}
我只想计算已被此部分索引索引的项目数,只是为了检查它是否正常工作。有没有办法做到这一点?还是有另一种好方法来检查部分索引索引了哪些内容?
MongoDB 不支持在获取索引文档详细信息的意义上检查索引的内容。
但是,您可以简单地 运行 使用与索引中相同的过滤器对您的集合进行查询,以获取索引文档:
db.collection.find({ "IsArchived": { "$eq": true } })
另外,如果你想得到计数,你可以在最后添加.count()
:
db.collection.find({ "IsArchived": { "$eq": true } }).count()
为了查看您的索引是否被使用,您可以 运行 例如以下查询:
db.collection.find({ "Name": "index check", "IsArchived": true }).explain()
如果索引被使用(应该是这种情况),那么发出上述语句应该在 "winningPlan"
字段内的某处打印类似这样的内容:
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"Name" : "index check"
},
"indexName" : "<your index name>"
如果它打印出这样的内容,那么索引就不会被使用:
"winningPlan" : {
"stage" : "COLLSCAN",
我刚刚意识到我有点厚。因为我使用的是 "unique" 标志,所以我还可以通过将项目插入到具有相同名称的集合中来测试索引。换句话说,对于索引:
{ // Note: using IsArchived: false instead of true
"unique" : true,
"name" : "Name_1",
"partialFilterExpression" : {
"IsArchived" : {
"$eq" : false
}
}
}
我应该得到以下插入这些项目的结果:
{ // Success
"Name" : "test1",
"IsArchived" : false
}
{ // Failure
"Name" : "test1",
"IsArchived" : false
}
{ // Success
"Name" : "test1",
"IsArchived" : true
}
我有一个集合的部分索引,看起来有点像这样:
{ // Fields
"Name" : 1
}
{ // Options
"unique" : true,
"name" : "Name_1",
"partialFilterExpression" : {
"IsArchived" : {
"$eq" : true
}
}
}
我只想计算已被此部分索引索引的项目数,只是为了检查它是否正常工作。有没有办法做到这一点?还是有另一种好方法来检查部分索引索引了哪些内容?
MongoDB 不支持在获取索引文档详细信息的意义上检查索引的内容。
但是,您可以简单地 运行 使用与索引中相同的过滤器对您的集合进行查询,以获取索引文档:
db.collection.find({ "IsArchived": { "$eq": true } })
另外,如果你想得到计数,你可以在最后添加.count()
:
db.collection.find({ "IsArchived": { "$eq": true } }).count()
为了查看您的索引是否被使用,您可以 运行 例如以下查询:
db.collection.find({ "Name": "index check", "IsArchived": true }).explain()
如果索引被使用(应该是这种情况),那么发出上述语句应该在 "winningPlan"
字段内的某处打印类似这样的内容:
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"Name" : "index check"
},
"indexName" : "<your index name>"
如果它打印出这样的内容,那么索引就不会被使用:
"winningPlan" : {
"stage" : "COLLSCAN",
我刚刚意识到我有点厚。因为我使用的是 "unique" 标志,所以我还可以通过将项目插入到具有相同名称的集合中来测试索引。换句话说,对于索引:
{ // Note: using IsArchived: false instead of true
"unique" : true,
"name" : "Name_1",
"partialFilterExpression" : {
"IsArchived" : {
"$eq" : false
}
}
}
我应该得到以下插入这些项目的结果:
{ // Success
"Name" : "test1",
"IsArchived" : false
}
{ // Failure
"Name" : "test1",
"IsArchived" : false
}
{ // Success
"Name" : "test1",
"IsArchived" : true
}