2014-02-21 4 views
0

У меня есть коллекция с объектами, как это:Получить конкретные значения из вложенных массивов элементов в коллекции Монго

{ 
    "_id": ObjectId("52ed12c144aecc4bf004d0b6"), 
    "title": "myBook", 
    "summary": "This is a book summary", 
    "covers": [ 
    "http://url.com/cover1.jpg", 
    "http://url.com/cover2.jpg", 
    ], 
    "urls": [ 
    "http://url.com/myBook", 
    "http://url.com/myBook/option2" 
    ], 
    "genres": [ 
    "comedy", 
    "romantic" 
    ], 
    "created_at": ISODate("2012-12-17T23:00:00Z"), 
    "modify_at": ISODate("2014-02-01T15:41:48.149Z") 
} 

, но я только хочу, чтобы получить первое значение из охватывает и URLS атрибутов, мой выход JSON должно быть что-то вроде этого:

{ 
    "_id": ObjectId("52ed12c144aecc4bf004d0b6"), 
    "title": "myBook", 
    "summary": "This is a book summary", 
    "covers": "http://url.com/cover1.jpg", 
    "urls": "http://url.com/myBook" 
    "genres": [ 
    "comedy", 
    "romantic" 
    ], 
    "created_at": ISODate("2012-12-17T23:00:00Z"), 
    "modify_at": ISODate("2014-02-01T15:41:48.149Z") 
} 

Я думаю, что я должен использовать map_reduce, но я не знаю, как я должен быть запрос, я попытался:

db.books.mapReduce(function(){ emit(this._id, this.covers); }, function(key, values){ return values[0]; }, { out: "map_reduce_covers" })

Но это не работает.

ответ

0

Вы можете использовать оператор проектирования $slice для управления элементами элементов массива, входящими в состав.

db.books.findOne({}, {covers: {$slice: 1}, urls: {$slice: 1}}) 

выходы:

{ 
    "_id": ObjectId("52ed12c144aecc4bf004d0b6"), 
    "title": "myBook", 
    "summary": "This is a book summary", 
    "covers": [ 
    "http://url.com/cover1.jpg" 
    ], 
    "urls": [ 
    "http://url.com/myBook" 
    ], 
    "genres": [ 
    "comedy", 
    "romantic" 
    ], 
    "created_at": ISODate("2012-12-17T17:00:00-0600"), 
    "modify_at": ISODate("2014-02-01T09:41:48.149-0600") 
} 

covers и urls еще массивы, и это становится все более сложным, если вы также хотите изменить.

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