Обновите несколько полей во вложенном массиве в mongodb (с помощью pymongo)

Я пытаюсь обновить несколько полей в массиве в массиве

Пример документа выглядит так:

{
id: 987654321
tweets: [
    {
        text: "RT @947FreshFM: A vigil will be held for #SandyHook victims at UMd. at 7pm at Nyumburu Ampitheater. @BlackTerp",
        urls: [

        ],
        id: 279718351289348100
    },
    {
        text: "RT @WTOP: McDonnell: If you talk completely about guns, I think you're missing the point. #AskTheGov http://t.co/hbFt7t1n",
        urls: [
            {
                status: null,
                domain: null,
                url: "http://t.co/hbFt7t1n",
                period: null,
                resolved_url: null,
                annotation: null
            }
        ],
        id: 281061376275906560
    }
],

}

Я хочу обновить массив URL-адресов как:

        urls: [
            {
                status: null,
                domain: "wtop.com",
                url: "http://t.co/hbFt7t1n",
                period: null,
                resolved_url: "http://wtop.com/?nid=610&sid=3162096",
                annotation: null,
                annotation2: "guncontrol"
            }
        ],

Я использую что-то вроде этого для обновления:

collection.update({"id":987654321, "tweets.id":281061376275906560,"tweets.urls.url":"http://t.co/hbFt7t1n"},
{"$set":{
    "tweets.urls.resolved_url":"http://wtop.com/?nid=610&sid=3162096",
    "tweets.urls.domain": "wtop.com",
    "tweets.urls.annotation2":"guncontrol"
}}, False,False)

Однако это дает мне ошибку

can't append to array using string field name [urls]

Какие-либо предложения?

1 ответ

Я не могу быть уверен, но это может быть то, что происходит. Из вашего примера документа ваша модель имеет следующую схему:

{  
    id: Number,  
    tweets: Array  
}

При поиске экземпляра модели в

collection.update( {
    "id": 987654321,
    "tweets.id": 281061376275906560,
    "tweets.urls.url": "http://t.co/hbFt7t1n"
}, ...)`

Вероятно, он не находит экземпляр модели, которую вы ищете.

Я бы попробовал запустить этот скрипт, чтобы убедиться, что ваши критерии поиска действительны:

console.log(collection.find({
    "id": 987654321,
    "tweets.id": 281061376275906560,
    "tweets.urls.url": "http://t.co/hbFt7t1n"
}));

Надеюсь, поможет!

Другие вопросы по тегам