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"
}}
])