2016-10-27 3 views
2

У меня есть запись, которую я хочу сортировать перед отправкой на внешний интерфейс.Mongodb: Сортировка списка по ключу и значению

db.getCollection('users').find({$or: 
        [ 
         {createdBy: 'abhi'}, 
         {createdBy: {'$ne': 'abhi'}, visibility: 'public'} 
        ]}).sort({'createdBy': 1}) 

Я хочу, чтобы отсортировать все записи для CreatedBy пользователя абхи, а затем других пользователей.

Что-то вроде:

.sort({'createdBy == abhi': 1}) 
+0

Вы хотите иметь все документы с пользователем 'abhi', во-первых, и другие документы, которые должны последовать, отсортированы в алфавитном порядке? – sergiuz

+0

@SergiuZaharie, что я должен сделать два звонка, а затем объединить записи. Нельзя ли это сделать, указав сортировку на основе ключа и стоимости? –

ответ

1

Вы можете добиться того, что с помощью агрегации.

  1. Сделать новую проекцию полех документов и добавить температуру поля first: true маркировки, если createdBy является abhi еще first: false
  2. Сортировать по {first:-1, createdBy:1} положить ваши отмеченные поля первыми в отсортированном списке
  3. (Re) Проект поля ваши, чтобы удалить поле TEMP first

код:

db.users.aggregate([ 
    {$project: 
     { 
      first: 
      { 
       $cond: { if: { "$eq": ["$createdBy", 'abhi' ]}, then: true, else: false } 
      }, 
      createdBy: '$createdBy' 
     } 
    }, 
    {$sort: {first:-1, "createdBy": 1}}, 
    {$project: 
     { 
      createdBy: 1 
      // Don't include first:1 
     }  
    } 
]) 
Смежные вопросы