MongoDB和NodeJS中的文本分数sorting的不同值的全文search

我试图用mongodb 3.4,nodejs和socket.io来实现全文search,具有不同的sorting。 到目前为止好,我有这个代码工作正常,但没有sorting部分:

socket.on('searchProductName', function (data) { MongoClient.connect(config.database.url, function (err, db) { db.collection(config.database.collection.products).distinct('productName', { $text: {$search: data}}, {score: {$meta: "textScore"} }, function (err, doc) { socket.emit('searchProductNameResults', doc); db.close(); }); }); }); 

我试图find一种方法来使用基于textScoresorting方法,但对于不同的值:

 db.collection.find( <query>, { score: { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } ) 

有任何想法吗?

谢谢

在聚合框架中使用aggregate()函数来利用$match$sort$grouppipe道操作符中的文本search ,这将有助于您达到所需的结果。

以下面的stream水线为例,它使用$match操作符作为初始步骤,并包含$text操作。 得分可以是$sortpipe道规范的一部分,前面的pipe道$group使用$addToSet运算符创build按分数sorting的不同值:

 socket.on('searchProductName', function (data) { MongoClient.connect(config.database.url, function (err, db) { var pipeline = [ { "$match": { "$text": { "$search": data } } }, { "$sort": { "score": { "$meta": "textScore" } } }, { "$group": { "_id": null, "products": { "$addToSet": "$productName" } } } ]; db.collection(config.database.collection.products) .aggregate(pipeline, function (err, docs) { socket.emit('searchProductNameResults', docs[0].products); db.close(); } ); }); }); 
Interesting Posts