2016-01-13 110 views
1

我想在mongodb中的文档的名称字段上创建一个索引,以便当我执行查找时,我应该获取所有名称按字母顺序显示。我可以如何实现这一目标?任何人都可以请帮我...如何在mongodb中的文档的“名称”字段上创建索引

我的文档MongoDB中:

db.col.find();                        
{ "_id" : ObjectId("5696256b0c50bf42dcdfeae1"), "name" : "Daniel", "age" : 24 }         
{ "_id" : ObjectId("569625850c50bf42dcdfeae2"), "name" : "Asha", "age" : 21 }        
{ "_id" : ObjectId("569625a40c50bf42dcdfeae3"), "name" : "Hampi", "age" : 34 }        
{ "_id" : ObjectId("5696260f0c50bf42dcdfeae5"), "name" : "Bhavana", "age" : 14 } 
+1

阅读文档[索引简介]( https://docs.mongodb.org/manual/core/indexes-introduction/),尤其是[创建索引](https://docs.mongodb.org/manual/tutorial/create-an-index/) – chridam

回答

2

其实你并不需要一个指数,以字母顺序显示您的结果。你需要的是.sort()方法。

db.collection.find().sort({'name': 1}) 

它返回

{ "_id" : ObjectId("569625850c50bf42dcdfeae2"), "name" : "Asha", "age" : 21 } 
{ "_id" : ObjectId("5696260f0c50bf42dcdfeae5"), "name" : "Bhavana", "age" : 14 } 
{ "_id" : ObjectId("5696256b0c50bf42dcdfeae1"), "name" : "Daniel", "age" : 24 } 
{ "_id" : ObjectId("569625a40c50bf42dcdfeae3"), "name" : "Hampi", "age" : 34 } 

文档中创建一个字段的索引将不会自动排序上你仍然需要使用.sort()方法特定领域的结果。看到Use Indexes to Sort Query Results


如果你想返回升序排列的文档中的所有名称的数组,那么你将需要使用.aggregate()方法。

流水线中的第一阶段是$sort阶段,您可以按照“名称”按升序对文档进行排序。最后一个阶段是$group阶段,你组文档,并使用$push累加器操作返回“名”

db.collection.aggregate([ 
    { "$sort": { "name": 1 } }, 
    { "$group": { "_id": null, "names": { "$push": "$name" } } } 
]) 

其产生的数组:

{ "_id" : null, "names" : [ "Asha", "Bhavana", "Daniel", "Hampi" ] } 
+0

但是我认为添加索引的原因不仅仅是因为用户想要使用'sort',而且他还希望快速执行排序查询。当通过字段'name'设置正确的索引并且您需要排序的结果时,则不需要任何额外的操作,并且查询将快速执行。在你的情况。 –

相关问题