python - 如果值不匹配则更新文档

标签 python mongodb mongodb-query pymongo

在 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 字段可以设置为 TrueFalse 并且日期也总是不同的 - 我不知道' 如果 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/

相关文章:

python - 调试斜纹异常错误

node.js - NodeJS Mongoose 将事件插入到 public/index.html

python - 在 wordpress 帖子中嵌入 Bokeh 图

python - 如何本地化 Google App Engine 上的应用程序?

node.js - 为什么npm安装失败: Error Etarget?

node.js - MongoDB - Postman 错误 - 数据发送失败

javascript - 多聚合查询 MongoDB

java - 将 MongoDB 结果集数据从 servlet 传递到 JSP

python - 具有广播的稀疏 Scipy 矩阵和向量的元素最大值

mongodb - 我应该在产品环境中使用 "allowDiskUse"选项吗?