gpt4 book ai didi

node.js - Mongo自定义多键排序

转载 作者:可可西里 更新时间:2023-11-01 09:58:21 25 4
gpt4 key购买 nike

Mongo docs状态:

The Mongo multikey feature can automatically index arrays of values.

这很好。但是如何基于多键排序呢?更具体地说,如何根据数组匹配百分比对集合进行排序

例如,我有一个模式 [ 'fruit', 'citrus' ] 和一个集合,如下所示:

{
title: 'Apples',
tags: [ 'fruit' ]
},

{
title: 'Oranges',
tags: [ 'fruit', 'citrus' ]
},

{
title: 'Potato',
tags: [ 'vegetable' ]
}

现在,我想根据每个条目与标签模式的匹配百分比对集合进行排序。橙子必须先来,苹果其次,土 bean 最后。

最有效、最简单的方法是什么?

最佳答案

从 MongoDB 2.1 开始,可以使用聚合框架进行类似的计算。语法类似于

db.fruits.aggregate(
{$match : {tags : {$in : ["fruit", "citrus"]}}},
{$unwind : "$tags"},
{$group : {_id : "$title", numTagMatches : {$sum : 1}}},
{$sort : {numTagMatches : -1}} )

返回

 {
"_id" : "Oranges",
"numTagMatches" : 2
},
{
"_id" : "Apples",
"numTagMatches" : 1
}

这应该比 map-reduce 方法快得多,原因有二。首先是因为实现是 native C++ 而不是 javascript。其次,因为“$match”会过滤掉根本不匹配的项目(如果这不是你想要的,你可以省略“$match”部分,并将“$sum”部分更改为1 或 0 取决于标签是否等于“水果”或“柑橘”或两者都不是)。

这里唯一需要注意的是,目前还不推荐将 mongo 2.1 用于生产环境。如果您在生产环境中运行,则需要等待 2.2。但是,如果您只是自己进行试验,则可以试用 2.1,因为聚合框架的性能应该更高。

关于node.js - Mongo自定义多键排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9822910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com