我想在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 }
答案 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" ] }