如何解决是否可以在MongoDB中存在于数组字段中的文档字段上创建索引?
我在MongoDB中有这样的文档:
{
"item" : "I1","Price" :
[
{"d": "2020-07-01","t":t1,"v":1000},{"d": "2020-07-01","t":t2,"v":1500},"t":t3,"v":1350},...
]
},{
"item" : "I2","Price" :
[
{"d": "2020-07-01","v":1025},{"d": "2020-07-02","v":1050},...
]
}
我只是想知道是否可以在“ Price.d”上创建索引? 谢谢
解决方法
是的。
Referenece from the documentation
如果字段是文档数组,则可以为嵌入的字段建立索引以创建复合索引。例如,考虑一个包含以下文档的集合:
{ _id: 1,a: [ { x: 5,z: [ 1,2 ] },{ z: [ 1,2 ] } ] }
{ _id: 2,a: [ { x: 5 },{ z: 4 } ] }
您可以在 { "a.x": 1,"a.z": 1 }
上创建一个复合索引。限制也适用于最多一个索引字段可以是数组的限制。
是的,您可以举一个例子。代码。
--from mongo shell,windows:
//prepare data
> db.test11.find().pretty();
{
"_id" : ObjectId("5f47c775c42d78fc841f35c5"),"item" : "I1","Price" : [
{
"d" : "2020-07-01","t" : 1,"v" : 1000
},{
"d" : "2020-07-01","t" : 2,"v" : 1500
},"t" : 3,"v" : 1350
}
]
}
{
"_id" : ObjectId("5f47c775c42d78fc841f35c6"),"item" : "I2","v" : 1025
},{
"d" : "2020-07-02","v" : 1050
}
]
}
//create index and explain shows the index used
> db.test11.createIndex({"Price.d":1})
{
"createdCollectionAutomatically" : false,"numIndexesBefore" : 1,"numIndexesAfter" : 2,"ok" : 1
}
> db.test11.getIndexes();
[
{
"v" : 2,"key" : {
"_id" : 1
},"name" : "_id_","ns" : "mycustomers.test11"
},{
"v" : 2,"key" : {
"Price.d" : 1
},"name" : "Price.d_1","ns" : "mycustomers.test11"
}
]
> db.test11.find({"Price.d": "2020-07-02"});
{ "_id" : ObjectId("5f47c775c42d78fc841f35c6"),"Price" : [ { "d" : "2020-07-01","v" : 1025 },{ "d" : "2020-07-02","v" : 1050 } ] }
> db.test11.find({"Price.d": "2020-07-02"}).explain();
{
"queryPlanner" : {
"plannerVersion" : 1,"namespace" : "mycustomers.test11","indexFilterSet" : false,"parsedQuery" : {
"Price.d" : {
"$eq" : "2020-07-02"
}
},"queryHash" : "F5F98F8D","planCacheKey" : "B39E1D2D","winningPlan" : {
"stage" : "FETCH","inputStage" : {
"stage" : "IXSCAN","keyPattern" : {
"Price.d" : 1
},"indexName" : "Price.d_1","isMultiKey" : true,"multiKeyPaths" : {
"Price.d" : [
"Price"
]
},"isUnique" : false,"isSparse" : false,"isPartial" : false,"indexVersion" : 2,"direction" : "forward","indexBounds" : {
"Price.d" : [
"[\"2020-07-02\",\"2020-07-02\"]"
]
}
}
},"rejectedPlans" : [ ]
},},"ok" : 1
}
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。