Сортировка нескольких элементов массива по полю - PullRequest
0 голосов
/ 14 января 2019

Вот записи документа MongoDB:

# OBJ 1
{
"UID":"3e87ca58-abcd-4444-9993-5555c07bf889",
"userId":"5c3cac81989a8469d435f3b2",
"title":"object1",
"latest":0
}

# OBJ 2
{
"UID":"3e87ca58-abcd-4444-9993-5555c07bf889",
"userId":"5c3cac81989a8469d435f3b2",
"title":"object1",
"latest":1
}

# OBJ 3
{
"UID":"3e87ca58-a013-4191-9993-0673c07bf77c",
"userId":"5c3cac81989a8469d435f3b2",
"title":"object2",
"latest":0
}

# OBJ 4
{
"UID":"3e87ca58-a013-4191-9993-0673c07bf77c",
"userId":"5c3cac81989a8469d435f3b2",
"title":"object2",
"latest":1
}

Моя цель - найти элементы, в которых $ match: { 'userId': "5c3cac81989a8469d435f3b2"}, а поле latest больше этого поля в элементе с таким же UID.
Так что я ожидаю получить этот результат

[
 {
  "UID":"3e87ca58-abcd-4444-9993-5555c07bf889",
  "userId":"5c3cac81989a8469d435f3b2",
  "title":"object1",
  "latest":1
 },
 {
  "UID":"3e87ca58-a013-4191-9993-0673c07bf77c",
  "userId":"5c3cac81989a8469d435f3b2",
  "title":"object2",
  "latest":1
 }
]

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать ниже aggregation

db.collection.aggregate([
  { "$match": { "userId": "5c3cac81989a8469d435f3b2" }},
  { "$group": {
    "_id": "$UID",
    "latest": { "$max": "$latest" },
    "title": { "$max": "$title" },
    "userId": { "$first": "$userId" }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...