有没有办法在某些字段上查询具有不同值的对象?例如,我有记录:
{ id : 1, name : "my_name", salary : 1200 }
{ id : 2, name : "my_name", salary : 800 }
{ id : 3, name : "john", salary : 500 }
查询:使用NOT_THE_SAME(名称)
查找所有内容我只想要id为1和3的记录,因为我指定我不希望在字段name
或2和3中具有相同值的记录,在这种情况下无关紧要。
答案 0 :(得分:14)
您可以使用db.collection.distinct
取回一系列唯一值:
> db.test.distinct("name")
[ "my_name", "john" ]
答案 1 :(得分:8)
您还可以使用带过滤集合的不同句子。例如,您可以使用以下查询从800以上的工资中获取不同的名称值:
db.test.distinct("name", { "salary": { $gt: 800 } })
答案 2 :(得分:5)
db.test.aggregate([{$group: {_id: "$name", salary: {$max: "$salary"}}}])
应列出所有名称及其工资。
$max
返回每个元素的最高薪水。您也可以选择$first
等,请参阅https://docs.mongodb.com/manual/reference/operator/aggregation/group/#accumulator-operator。
答案 3 :(得分:5)
如果您不关心各个字段的内容,但想要整个记录,则将保留(全部感谢$$ROOT
)为每个“名称”找到的第一个文档:
db.coll.aggregate([
{ "$group": {
"_id": "$name",
"doc": { "$first": "$$ROOT" }
}},
{ "$replaceRoot": {
"newRoot": "$doc"
}}
])
$replaceRoot
将它们用作文档,而不是使用doc
将它们封装在_id
字段中。
如果您担心各个字段的内容,我想您可能想先对文档进行排序:
db.coll.aggregate([
{ "$sort": { "$salary": 1 }},
{ "$group": {
"_id": "$name",
"doc": { "$first": "$$ROOT" }
}},
{ "$replaceRoot": {
"newRoot": "$doc"
}}
])
答案 4 :(得分:1)
db.test.distinct("name")
db.test.aggregate([{$group: {_id: "$name", salary: {$max: "$salary"}}}])
答案 5 :(得分:0)
db.runCommand ( {
distinct: "CollectionName",
key: "key",
query: { "createdDate": {
$gte:new ISODate("2017-04-04T23:59:59Z"),
$lte:new ISODate("2017-04-25T23:59:59Z")}} } )
此查询有助于查找集合中的数据,将从满足日期间条件的所有文档中获取密钥值