【发布时间】:2016-05-19 19:29:47
【问题描述】:
在MongoDB中,如果文档的一个字段存在,如何跳过更新?
举个例子,我有以下文档结构,如果link 键不匹配,我只想update。
{
"_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 将是唯一且特定于链接的,我希望它在 good 数组中插入不存在的 link,如果存在则不执行任何操作。
【问题讨论】:
-
您为什么使用
upsert选项?如果没有匹配项,您是否打算插入新文档? “域”也是唯一的吗? -
是的
domain将是link独有的 - 我想我可能使用不正确,如果它不存在,我希望它在数组中插入链接,如果不存在则什么也不做它确实存在
标签: python mongodb mongodb-query pymongo