账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongodb 复制子文档修改并插入相同文档中
    27
    0

    需求:
    需要复制文档中的子文档并修改某个字段插入到相同的文档中。如文档:

    { 
        "_id" : ObjectId("59b5e84d71ab5580d643d070"), 
        "modifiedOn" : ISODate("2019-04-03T14:57:22.177+0000"), 
        "modifiedBy" : "XXX", 
        "createdOn" : ISODate("2017-09-09T16:33:34.464+0000"), 
        "createdBy" : "liuyu", 
        "channelSales" : [
            {
                "platform" : "amazon", 
                "channel" : "amazon_ca", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dc1")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_uk", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dc0")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_us", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dbf")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_jp", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dbe")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_de", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dbd")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_es", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dbc")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_fr", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dbb")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_it", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39dba")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_au", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db9")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_de", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db8")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_es", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db7")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_fr", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db6")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_it", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db5")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_uk", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db4")
            }, 
            {
                "platform" : "ebay", 
                "channel" : "ebay_us", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("59b5f86aaa0ee15555a39db3")
            }, 
            {
                "platform" : "walmart", 
                "channel" : "walmart_us", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("5a4d9de2bb1aee844f03e1a6")
            }, 
            {
                "platform" : "walmart", 
                "channel" : "walmart_ca", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("5a4d9de2bb1aee844f03e1a5")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_au", 
                "saleStatus" : "T", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("5abe095bb1d48d194f6187c0")
            }, 
            {
                "platform" : "amazon", 
                "channel" : "amazon_in", 
                "saleStatus" : "A", 
                "type" : "", 
                "url" : "", 
                "remark" : "", 
                "isCaught" : "0", 
                "_id" : ObjectId("5c9af2776f3dcf04491818f2")
            }
        ], 
        "statusLevel" : "", 
        "statusType" : "", 
        "status" : "A", 
        "skuId" : "abc001", 
        "__v" : NumberInt(3)
    }

    需要复制:

    {
        "platform" : "walmart", 
        "channel" : "walmart_us", 
        "saleStatus" : "A", 
        "type" : "", 
        "url" : "", 
        "remark" : "", 
        "isCaught" : "0", 
        "_id" : ObjectId("5a4d9de2bb1aee844f03e1a6")
    }

    并修改{"channel" : "walmart_us"}{"channel" : "walmart_dsv"},修改后插入原文档子文档字段。
    尝试代码:

    db.getCollection("0521").aggregate([{
        $unwind: "$channelSales"
    }, {
        $project: {
            platform: "$channelSales.platform",
            channel: "$channelSales.channel",
            saleStatus: "$channelSales.saleStatus",
            type: "$channelSales.type",
            url: "$channelSales.url",
            remark: "$channelSales.remark",
            isCaught: "$channelSales.isCaught",
            _id: "$channelSales._id"
        }
    }, {
        $match: {
            "channel": "amazon_us"
        }
    }]).forEach(function(award_team) {
        if (award_team != null) {
            db.getCollection("0521").findAndModify({
                query: {
                    _id: award_team._id
                },
                update: {
                    $push: {
                        channelSales: [{
                            platform: award_team.platform,
                            channel: "walmart_dsv",
                            saleStatus: award_team.saleStatus,
                            type: award_team.type,
                            url: award_team.url,
                            remark: award_team.remark,
                            isCaught: award_team.isCaught,
                            _id: award_team._id
                        }]
                    }
                },
                upsert: true,
            });
        }
    });

    但是变成新增加一个文档,请教如何处理。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 台灯很亮 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部