【问题标题】:How to get tag count in mongodb query results?如何在 mongodb 查询结果中获取标签计数?
【发布时间】:2012-11-09 21:59:53
【问题描述】:

我正在尝试在 mongodb 中搜索基于标签的文章:

> use test;
> db.articles.save( { name: "article1", tags: ['one', 'two', 'three'] } );
> db.articles.save( { name: "article2", tags: ['two', 'three'] } );
> db.articles.save( { name: "article3", tags: ['one', 'three'] } );
> db.articles.save( { name: "article4", tags: ['one', 'two', 'four'] } );
> db.articles.save( { name: "article5", tags: ['four', 'five'] } );
> db.articles.ensureIndex( { tags: 1 } );
> db.articles.find( { $or : [ { tags: 'four' }, { tags: 'five' } ] } )

{ "_id" : ObjectId("509d7b555bff77729a26a232"), "name" : "article4", "tags" : [ "one", "two", "four" ] }
{ "_id" : ObjectId("509d7b555bff77729a26a233"), "name" : "article5", "tags" : [ "four", "five" ] }

如您所见,查询查找“四”或“五”,但我希望得到按“最佳匹配”排序的结果(匹配的两个标签优于匹配的一个标签)。

我怎样才能完成这项工作?地图减少?

提前致谢:

xabi

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    很抱歉让您失望了,但 mongo 目前无能为力。 唯一的选择是在应用程序端实现排序。我知道这可能效率太低,但没有其他选择。

    我唯一能帮你的就是建议替换

    $or : [ { tags: 'four' }, { tags: 'five' } ]
    

    tags:{$in:['four','five']}
    

    这对您的查询没有帮助(我的意思是订购结果),但如果有很多不同的标签,您在服务器上创建它会更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多