【问题标题】:Inserting a document into a document satisfying two conditions将文档插入到满足两个条件的文档中
【发布时间】:2019-06-03 11:20:05
【问题描述】:

我想在已经存在的文档中插入一个文档(数组)。

我已经阅读了有关将文档插入文档的堆栈溢出主题。我已经阅读了$push 并且已经理解,但我的要求几乎没有什么不同。所以,我想做的是 - 我想为与特定项目匹配的特定员工添加目标。

{
    "empCode": "001",
    "emapName": "ABC",
    "projects": [{
        "projectName": "P001",
        "projectMoreDetails": "projectMoreDetails",
        "Goals": [{
            "GoalName": "Goal1",
            "GoalMoreDetails": "GoalMoreDetails"
        }, {
            "GoalName": "Goal2",
            "GoalMoreDetails": "GoalMoreDetails"
        }]
    }, {
        "projectName": "P002",
        "projectMoreDetails": "projectMoreDetails",
        "Goals": [{
            "GoalName": "Goal1",
            "GoalMoreDetails": "GoalMoreDetails"
        }, {
            "GoalName": "Goal2",
            "GoalMoreDetails": "GoalMoreDetails"
        }]
    }]

}

谁能告诉我如何为员工代码“001”的项目“P002”添加更多目标?

【问题讨论】:

    标签: java mongodb spring-boot


    【解决方案1】:

    要查找匹配的文档,请使用:

    {empCode:"001", projects:{$elemMatch:{"projectName":"P002"}}}
    

    更新时,可以使用$获取匹配的数组元素。

    您的最终更新查询将类似于:

    db.emp.update(
        {empCode:"001", projects:{$elemMatch:{"projectName":"P002"}}},
        {$push:{"projects.$.Goals":{GoalName:"Upvote"}}}
    )
    

    【讨论】:

    • 谢谢 Dushyant!我会尝试并在这里更新。
    • @the_learner 我已经在 Mongo shell 上试​​过了。如果您使用的是 java 驱动程序,语法可能会有所不同。
    • 是的,我明白了。我正在尝试在 java 中使用它的等效语法。
    • 嗨@DushyantBangal,我可以通过代码生成查找查询,但它没有给出预期的结果。我在 NoSQL Browser 上使用了相同的查询来获取结果,但它在那里也不起作用。代码生成的查询如下——12:05:10.911 [main] DEBUG org.mongodb.driver.protocol.command - Sending command '{ "find" : "ESPAUser", "filter" : { "empCode" : "JK004009", "projectAssessment" : { "$elemMatch" : { "paTitle" : "CCCHO" } } }, "limit" : 1
    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多