如何在mongodb中的文档的“名称”字段上创建索引

时间:2016-01-13 10:18:12

标签: mongodb mongodb-query

我想在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 个答案:

答案 0 :(得分: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" ] }