【问题标题】:$merge, $match and $update in one aggregate query一个聚合查询中的 $merge、$match 和 $update
【发布时间】:2021-10-20 00:30:45
【问题描述】:

我的集合中有数据,例如:“工作”。我试图每 2 小时后将特定数据从“作业”复制到一个新集合(最初可能不存在),并为复制的数据添加一个新密钥。 我一直在尝试使用此查询来复制数据:

db.getCollection("jobs").aggregate([{ $match: { "job_name": "UploadFile", "created_datetime" : {"$gte":"2021-08-18 12:00:00"} } },{"$merge":{into: {coll : "reports"}}}])

但在此之后,“reports”集合中的计数为 0。此外,如何在不使用额外 updateMany() 查询的情况下更新文档(使用提取键“report_name”)?

jobs集合中的数据如图:

{
    "_id" : ObjectId("60fa8e8283dc22799134dc6f"),
    "job_id" : "408a5654-9a89-4c15-82b4-b0dc894b19d7",
    "job_name" : "UploadFile",
    "data" : {
        "path" : "share://LOCALNAS/Screenshot from 2021-07-23 10-34-34.png",
        "file_name" : "Screenshot from 2021-07-23 10-34-34.png",
        "parent_path" : "share://LOCALNAS",
        "size" : 97710,
        "md5sum" : "",
        "file_uid" : "c4411f10-a745-48d0-a55d-164707b7d6c2",
        "version_id" : "c3dfd31a-80ba-4de0-9115-2d9b778bcf02",
        "session_id" : "c4411f10-a745-48d0-a55d-164707b7d6c2",
        "resource_name" : "Screenshot from 2021-07-23 10-34-34.png",
        "metadata" : {
            "metadata" : {
                "description" : "",
                "tag_ids" : [ ]
            },
            "category_id" : "60eed9ea33c690a0dfc89b41",
            "custom_metadata" : [ ]
        },
        "upload_token" : "upload_token_c5043927484e",
        "upload_url" : "/mnt/share_LOCALNAS",
        "vfs_action_handler_id" : "91be4282a9ad5067642cdadb75278230",
        "element_type" : "file"
    },
    "user_id" : "60f6c507d4ba6ee28aee5723",
    "node_id" : "syeda",
    "state" : "COMPLETED",
    "priority" : 2,
    "resource_name" : "Screenshot from 2021-07-23 10-34-34.png",
    "group_id" : "upload_group_0babf8b7ce0b",
    "status_info" : {
        "progress" : 100,
        "status_msg" : "Upload Completed."
    },
    "error_code" : "",
    "error_message" : "",
    "created_datetime" : ISODate("2021-07-23T15:10:18.506Z"),
    "modified_datetime" : ISODate("2021-07-23T15:10:18.506Z"),
    "schema_version" : "1.0.0",
}

【问题讨论】:

    标签: python-3.x mongodb mongodb-query aggregate


    【解决方案1】:

    您的$match 阶段包含一个将created_datetime 作为string 的条件,而在您的示例数据中它是一个ISODate。这样的条件不会返回任何文件,试试:

    {
        $match: {
            "job_name": "UploadFile",
            "created_datetime": {
                "$gte": ISODate("2021-07-01T12:00:00.000Z")
            }
        }
    }
    

    Mongo Playground

    【讨论】:

    • 哦好吧..!现在它将条目复制到新集合中。谢谢..!
    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多