Обновите несколько полей во вложенном массиве в 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"
}));
Надеюсь, поможет!