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
和$group
pipe道操作符中的文本search ,这将有助于您达到所需的结果。
以下面的stream水线为例,它使用$match
操作符作为初始步骤,并包含$text
操作。 得分可以是$sort
pipe道规范的一部分,前面的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(); } ); }); });