2
假設我在MongoDB中有一個users
集合。典型的用戶文檔包含一個名稱字段和一組代表用戶特徵的子文檔。說這樣的:MongoDB - 按子文檔匹配排序
{
"name": "Joey",
"characteristics": [
{
"name": "shy",
"score": 0.8
},
{
"name": "funny",
"score": 0.6
},
{
"name": "loving",
"score": 0.01
}
]
}
我怎麼能找到最有趣的最有趣的用戶,按他們的有趣程度排序?
我到目前爲止發現的唯一辦法,是使用聚合框架,在類似這樣的查詢:
db.users.aggregate([
{$project: {"_id": 1, "name": 1, "characteristics": 1, "_characteristics": '$characteristics'}},
{$unwind: "$_characteristics"},
{$match: {"_characteristics.name": "funny"}},
{$sort: {"_characteristics.score": -1}},
{$limit: 10}
]);
這似乎正是我想要的,根據這除了事實到MongoDB's documentation on using indexes in pipelines,一旦我在聚合管道中調用$project
或$unwind
,我不能再使用索引來匹配或排序集合,這使得此解決方案對於非常大的集合而言是不可行的。
究竟是我最終做了什麼:)謝謝重申雖然。關於第二個建議 - 不幸的是,索引有太多不同的「特徵」(MongoDB目前允許每個集合最多有64個不同的索引)。 – ozk