Как в MongoDB пропустить обновление, если одно поле документа существует?
Чтобы привести пример, у меня есть следующая структура документа, и я хотел бы только update, если ключ link не совпадает.
{
"_id": {
"$oid": "56e9978732beb44a2f2ac6ae"
},
"domain": "example.co.uk",
"good": [
{
"crawled": true,
"added": {
"$date": "2016-03-16T17:27:17.461Z"
},
"link": "/url-1"
},
{
"crawled": false,
"added": {
"$date": "2016-03-16T17:27:17.461Z"
},
"link": "url-2"
}
]
}
Мой запрос на обновление:
links.update({
"domain": "example.co.uk"
},
{'$addToSet':
{'good':
{"crawled": False, 'link':"/url-1"} }}, True)
Часть проблемы заключается в том, что поле crawl может быть установлено на True или False, а дата также всегда будет разной — я не хочу добавлять в массив, если URL-адрес существует, независимо от статуса crawled.
Обновление: Просто для ясности, если URL-адрес не находится в документе, я хочу, чтобы он был добавлен в существующий массив, например, если было введено /url-3, документ будет выглядеть так:
{
"_id": {
"$oid": "56e9978732beb44a2f2ac6ae"
},
"domain": "example.co.uk",
"good": [
{
"crawled": true,
"added": {
"$date": "2016-03-16T17:27:17.461Z"
},
"link": "/url-1"
},
{
"crawled": false,
"added": {
"$date": "2016-03-16T17:27:17.461Z"
},
"link": "url-2"
},
{
"crawled": false,
"added": {
"$date": "2016-04-16T17:27:17.461Z"
},
"link": "url-3"
}
]
}
domain будет уникальным и специфичным для ссылки, и я хочу, чтобы он вставлял link в массив good, если он не существует, и ничего не делал, если он существует.
upsert? Собираетесь ли вы вставить новый документ, если совпадения нет? Также является ли домен уникальным? - person styvane   schedule 21.05.2016domainбудет уникальным дляlink- я думаю, что могу использовать его неправильно, я хочу, чтобы он вставлял ссылку в массив, если он не существует, и ничего не делал, если он существует - person Adders   schedule 21.05.2016