在 Mongodb 中,如果文档的一个字段存在,如何跳过更新?
举个例子,我有以下文档结构,如果 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
数组中(如果不是) t 存在,如果它确实存在,则什么也不做。
最佳答案
执行此操作的唯一方法是使用 find_one
查找集合中是否有任何文档符合您的条件方法,您还需要考虑过滤条件中的“good.link”字段。如果没有匹配的文档,您可以使用 update_one
运行更新查询方法,但这次您不在查询条件中使用“good.link”字段。你也不需要 $addToSet
运算符,因为它没有做任何简单的事情,使用 $push
update 运算符,它使您的意图明确。您也不需要在此处“更新”选项。
if not link.find_one({"domain": "example.co.uk", "good.link": "/url-1"}):
link.update_one({"domain": "example.co.uk"},
{"$push": {"good": {"crawled": False, 'link':"/url-1"}}})
关于python - 如果值不匹配则更新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37332442/