2015-04-24 2 views
0

У меня есть данные в MongoDB в виде:Найти объект в MongoDB

{ 
      "_id" : 154, 
      "record_id" : "001280000033x54AAA", 
      "jsonData" : "", 
      "user_id" : 1, 
      "userName" : "[email protected]", 
      "backup_no" : 1 
} 


{ 
      "_id" : 155, 
      "record_id" : "001280000033x54AAA", 
      "jsonData" : "", 
      "user_id" : 1, 
      "userName" : "[email protected]", 
      "backup_no" : 2 
} 
    ... 

Я хочу, чтобы получить данные, основанные на «user_id», «имя пользователя», но если запись с таким же record_id существует в нижней 'backup_no', тогда мне нужно выбрать запись с самым высоким backup_no.

Я попытался объединить записи и затем запросить, но я не могу найти решение.

Благодаря

ответ

1

Использование Монго aggregation вы можете получить ваши результаты проверки ниже запроса:

db.collectionName.aggregate({ 
    "$sort": { 
    "backup_no": -1 //first sort by backup_no 
    } 
}, { 
    "$group": { 
    "_id": "$record_id", // group by record_id so here only get distinct record_id 
    "userId": { 
     "$first": "$user_id" 
    }, 
    "userName": { 
     "$first": "$userName" 
    }, 
    "backup_no": { 
     "$first": "$backup_no" 
    } 
    } 
}, { 
    "$project": { 
    "_id": 0, 
    "record_id": "$_id", 
    "user_id": "$user_id", 
    "userName": "$userName", 
    "backup_no": "$backup_no" 
    } 
}) 
+0

Большое спасибо за сохранение моего дня .. :) –

0
db.collection.aggregate([{ 
    $group: { 
    _id: "$record_id", 
    user_id: { 
     $last: "$user_id" 
    }, 
    userName: { 
     $last: "$userName" 
    }, 
    backup_no: { 
     $max: "$backup_no" 
    } 
    } 
}]) 

или

Вы можете просто сортировать по убыванию по backup_no, а затем игнорировать все, кроме первой записи для каждого отдельного record_id?
MongoDB $orderby

db.users.find({ }).sort({ backup_no: -1 }); 
+0

OP состояния упоминается 'если же record_id существует, то получить высокий backup_no' – Yogesh

+0

Добавлено разъяснение 2-ой вариант, там что-то еще вы видели, что не полностью ответили на вопрос? –

+0

Да, я получаю второй вариант, но как игнорировать все записи с помощью record_id, которые не отличаются друг от друга, кроме первого появления записи с помощью record_id. Нужно ли мне делать обработку в фоновом режиме? –

Смежные вопросы