我希望自动填充功能可以从数据库中建议关键字。如果我使用MongoDB和多键索引,我在数据库中已经有了这些关键字,但是我能以某种方式访问它们吗?
如果我在集合中有以下对象:
{
"title": "Some awesome title",
"keywords": [
"some",
"awesome",
"title"
]
}
我有多键索引:
db.somecollection.ensureIndex({ "keywords" : 1 })
因此索引将包含以下值:
"some"
"awesome"
"title"
如果用户在自动完成控件中输入“s”字母,应用程序应该建议“some”关键字。我可以从索引中搜索关键字,或者我该怎么做?
答案 0 :(得分:1)
您可以选择使用聚合框架:
DEV:history:PRI > db.test.find()
{ "_id" : ObjectId("51c37c0c20d107378f9af3cc"), "title" : "Some awesome title", "keywords" : [ "some", "awesome", "title" ] }
{ "_id" : ObjectId("51c37de420d107378f9af3ce"), "title" : "Some awesome title", "keywords" : [ "some", "awesome", "something" ] }
{ "_id" : ObjectId("51c37f1920d107378f9af3cf"), "title" : "Some awesome title", "keywords" : [ "something", "awesome", "someone" ] }
DEV:history:PRI > db.test.aggregate({$match : {keywords : /^som/}}, {$project:{keywords:1, _id : 0}}, {$unwind : "$keywords"}, {$match : {keywords : /^som/}}, {$group: {_id : '$keywords', count : {$sum : 1}}})
{
"result" : [
{
"_id" : "someone",
"count" : 1
},
{
"_id" : "something",
"count" : 2
},
{
"_id" : "some",
"count" : 2
}
],
"ok" : 1
}
注意:不涵盖多键索引,并且已经提交了一些JIRA问题。因此,尽管使用了索引,但未涵盖查询(对于多键索引)
我们可以选择使用'count'参数来决定显示自动完成的顺序。如果您不需要,请从查询中删除。