Как я могу получить (Node.js) документы MongoDB с отличным значением, где какое-то другое значение является самым низким?
У меня есть такая коллекция:
{
name : 'a',
value: 10,
word : 'baz'
},
{
name : 'a',
value: 65,
word : 'bar'
},
{
name : 'a',
value: 3,
word : 'foo'
},
{
name : 'b',
value: 110,
word : 'bar'
},
{
name : 'b',
value: 256,
word : 'baz'
}
Как выполнить запрос, который приводит к выбору полных документов, где name
уникален, и value
самый низкий? Например:
{
name : 'a',
value: 3,
word : 'foo'
},
{
name : 'b',
value: 110,
word : 'bar'
}
1 ответ
Решение
Вы могли бы использовать $min
оператор в aggregation framework
чтобы достичь того, что вы хотите, используя запрос, как:
db.collection.aggregate([
{$group:{_id:"$name", value:{$min:"$value"}}},
{$limit:2}
])
Этот запрос вернет:
{
"result" : [
{
"_id" : "b",
"value" : 110
},
{
"_id" : "a",
"value" : 3
}
],
"ok" : 1
}
Вы также можете включить $sort
фаза в конвейере, если вы хотите, чтобы ваши результаты были отсортированы.
РЕДАКТИРОВАТЬ: Вы можете выбрать другие элементы, не включенные в поле _id $group, используя небольшой трюк. Сначала отсортируйте документы, а затем используйте $first
оператор:
db.collection.aggregate([
{$sort:{value:1}},
{$group:{_id:"$name", value:{$min:"$value"}, word:{$first:"$word"}}}
])
Этот запрос вернет:
{
"result" : [
{
"_id" : "b",
"value" : 110,
"word" : "bar"
},
{
"_id" : "a",
"value" : 3,
"word" : "foo"
}
],
"ok" : 1
}