2016-01-25 2 views
1

я получил несколько документов, как это:MongoDB: Получение документа и только один объект массива

{ 
    "_id" : "sgG6G9XTvvjj7uxwQ", 
    "title" : "A title", 
    "notes" : [ 
     { 
      "id" : "ePce6fBAHx9KeKjuM", 
      "timestamp" : 1453731403807, 
      "message" : "some text", 
      "name" : "Tom" 
     }, 
     { 
      "id" : "BAHx9KeKjuMePce6f", 
      "timestamp" : 1453731403808, 
      "message" : "some text", 
      "name" : "Bob" 
     }, 
     { 
      "id" : "ePce6fBAHx9KeKjuM", 
      "timestamp" : 1453731403809, 
      "message" : "some text", 
      "name" : "Tom" 
     } 
    ] 
} 

Я получаю этот документ с помощью этого find:-запросов

Collection.find({}, { sort: { title: 1 }}); 

Но я не» t необходимо полное поле notes. Меня интересует только id последнего объекта примечания. Это означает, что я должен заказать все объекты заметок по метке времени и просто взять первый (= самый новый).

Я не совсем уверен, могу ли я сделать это по запросу find или если мне нужно сделать это после получения полных данных.

Так что лучший результат для меня будет:

{ 
    "_id" : "sgG6G9XTvvjj7uxwQ", 
    "title" : "A title", 
    "notes" : [ 
     { 
      "id" : "ePce6fBAHx9KeKjuM" 
     } 
    ] 
} 

ответ

3

Вы можете использовать проекцию $slice, чтобы ограничить количество элементов массива, возвращенного. Например:

db.collection.find({}, {title: 1, "notes.id": 1, notes: {$slice: 1}}).sort({title: 1}); 

Вернется:

{ 
     "_id" : "sgG6G9XTvvjj7uxwQ", 
     "title" : "A title", 
     "notes" : [ 
       { 
         "id" : "ePce6fBAHx9KeKjuM" 
       } 
     ] 
} 
+0

Это очень приятно. Думаю, мне нужно сохранить временную метку и заказать также временную метку. Как мне уменьшить карту на клиенте? – user3142695

+0

Существует хорошее объяснение [Map-Reduce] (https://docs.mongodb.org/manual/core/map-reduce/) на веб-сайте MongoDB Docs [docs.mongodb.org/manual/core/map-reduce ] (https://docs.mongodb.org/manual/core/map-reduce/) –

+0

Я нашел лучший способ сделать это с помощью [$ slice] (https://docs.mongodb.org/manual/ ссылка/оператор/проекция/срез /) проекция. Я обновил свой ответ. Я думаю, это правильно решает вашу проблему. Спасибо, что приняли мой ответ ;-) –

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