【问题标题】:Getting Distinct values of multiple values in Mongodb在Mongodb中获取多个值的不同值
【发布时间】:2015-11-18 14:14:58
【问题描述】:

假设我有以下书籍集合(为了紧凑而删除了 ID 字段):

{ "author" : "Steve Jones", "title" : "Fun Stuff",    "edition" : "2010" }
{ "author" : "Steve Jones", "title" : "Fun Stuff",    "edition" : "2011" }
{ "author" : "Steve Jones", "title" : "Boring Stuff", "edition" : "2010" }
{ "author" : "Ben Johnson", "title" : "Other Stuff",  "edition" : "2010" }

如果我只想找到每本书的最新版本,我应该怎么做?换句话说:我想得到一个结果,它省略了 2010 年版的史蒂夫·琼斯的 Fun Stuff,并且只有 2011 年版:

{ "author" : "Steve Jones", "title" : "Fun Stuff",    "edition" : "2011" }
{ "author" : "Steve Jones", "title" : "Boring Stuff", "edition" : "2010" }
{ "author" : "Ben Johnson", "title" : "Other Stuff",  "edition" : "2010" }

如果这是一个关系数据库并且我正在编写查询,我可能会编写类似SELECT DISTINCT title, DISTINCT author, edition WHERE 1 SORT BY edition DESC 的内容。所以我来自 SQL 背景的直觉是查找db.collection.distinct(),但它的工作方式似乎与我习惯的完全不同;它只返回一个数组,其中包含该单个字段的每个不同值。

这是我需要以编程方式解决的问题吗?或者我可以完全使用 mongo 函数和 bson 来做到这一点吗?

【问题讨论】:

  • stackoverflow.com/questions/23119692/… 可以看看这个作为参考吗?
  • 哦,嘿,看着我,问已经回答的问题。这不是 exact 相同类型的问题,但它仍然具有我正在寻找的内容。谢谢@Shih-MinLee。
  • 没有问题的人很高兴它有帮助

标签: mongodb mongodb-query bson


【解决方案1】:

尝试这样开始:

db.textbooks.aggregate({ $group: {
    _id: { title: "$title", author: "$author" },
    latestEdition: { $max: "$edition" }
}})

这将按标题和作者以及最新版本为您提供每本独特的书。使用查询和aggregation 来获得您想要的结果。

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 1970-01-01
    • 2020-05-30
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多