MongoDB - upsert с использованием списков

Я новичок в MongoDB и хотел спросить, как написать команду обновления, включающую upsert и list.

В основном я хочу сделать что-то вроде этого:

{"_id" : ObjectId("4c28f62cbf8544c60506f11d"),
"some_other_data":"goes here",
"trips": [
    {"name": "2010-05-10",
     "loc": [{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:35"}, 
        {"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:24"}]
    },
    {"name": "2010-05-08",
     "loc": [{"lat":21.324239, "lng": 16.8735234, "updated_at": "Mon May 8 2010 11:18:05"},
        {"lat":21.311234, "lng": 16.8743271, "updated_at": "Mon May 8 2010 11:17:55"}, 
        {"lat":21.321238, "lng": 16.8782219, "updated_at": "Mon May 8 2010 11:17:45"}]
    }
]}

Обратите внимание, что:

Вы указываете название поездки и текущее местоположениеЕсли поездка еще не существует, ее необходимо создатьtrips.name должен быть уникальным, так что если он существует, вы добавляете в массив location

Я написал этот запрос, комбинируя позиционный оператор с $ push.

    db.mycollection.update({"application_id": "MyTestApp", 
                            "trips.name": "2010-05-10"},
                           {$push: {'trips.$.loc': {"lat":11, "lng":11} }}, 
                           true);

Но это приводит к таким данным:

> db.mycollection.find({"application_id":"MyTestApp"})          
{ "_id" : ObjectId("4c29044ebf8544c60506f11f"), 
"application_id" : "MyTestApp", 
"trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] }, 
"name" : "2010-05-10" } 
}

Ты это видишь

"поездки" не массивон буквально взял «$» и создал ключ с этим (дох!)

До сих пор я был очень доволен MongoDB, но определенно крутая кривая обучения с написанием сложных запросов.

Любые отзывы будут оценены.

Заранее спасибо, Amie

Ответы на вопрос(2)

Ваш ответ на вопрос