Mongodb 获取不同的记录值

Mongodb 获取不同的记录值,mongodb,Mongodb,是否有一种方法可以查询某些字段上具有不同值的对象?例如,我有以下记录: { id : 1, name : "my_name", salary : 1200 } { id : 2, name : "my_name", salary : 800 } { id : 3, name : "john", salary : 500 } 查询:查找不相同(名称)的所有 我只想要id为1和3的记录,因为我指定了我不想要字段name或字段2和3中具有相同值的记录,在这种情况下,这并不重要。您可以使用它来获取唯一

是否有一种方法可以查询某些字段上具有不同值的对象?例如,我有以下记录:

{ id : 1, name : "my_name", salary : 1200 }
{ id : 2, name : "my_name", salary : 800 }
{ id : 3, name : "john", salary : 500 }
查询:查找不相同(名称)的所有

我只想要id为1和3的记录,因为我指定了我不想要字段
name
或字段2和3中具有相同值的记录,在这种情况下,这并不重要。

您可以使用它来获取唯一值的数组:

> db.test.distinct("name")
[ "my_name", "john" ]

您还可以对筛选的集合使用不同的句子。例如,您可以通过以下查询从超过800的薪资中获取不同的名称值:

db.test.distinct("name", { "salary": { $gt: 800 } })
此查询有助于查找集合中的数据,将从满足日期之间条件的所有文档中获取密钥值

db.test.aggregate([{$group: {_id: "$name", salary: {$max: "$salary"}}}])
应该列出所有的名字和他们的薪水

$max
返回每个元素的最高工资。您也可以选择
$first
等,请参阅。

Mongo DB version>3.4 Mongo DB版本<3.4
如果您不关心不同字段的内容,但需要完整的记录,这将保留为每个“名称”找到的第一个文档(完整,感谢
$$ROOT
):

$replaceRoot
将它们作为文档使用,而不是将它们封装在具有
\u id
doc
字段中

如果您关心不同字段的内容,我想您可能需要首先对文档进行排序:

db.coll.aggregate([
  { "$sort": { "$salary": 1 }},
  { "$group": { 
    "_id": "$name", 
    "doc": { "$first": "$$ROOT" } 
  }},
  { "$replaceRoot": {
    "newRoot": "$doc"
  }}
])

虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性@毛毯吸烟者补充道,希望这个帮手像个魔咒。这是我不容易找到的东西。谢谢
db.test.distinct("name")
db.test.aggregate([{$group: {_id: "$name", salary: {$max: "$salary"}}}])
db.coll.aggregate([
  { "$group": { 
    "_id": "$name", 
    "doc": { "$first": "$$ROOT" }
  }},
  { "$replaceRoot": {
    "newRoot": "$doc"
  }}
])
db.coll.aggregate([
  { "$sort": { "$salary": 1 }},
  { "$group": { 
    "_id": "$name", 
    "doc": { "$first": "$$ROOT" } 
  }},
  { "$replaceRoot": {
    "newRoot": "$doc"
  }}
])