Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅查找和替换文档中的某些字段_Javascript_Mongodb_Mongodb Query - Fatal编程技术网

Javascript 仅查找和替换文档中的某些字段

Javascript 仅查找和替换文档中的某些字段,javascript,mongodb,mongodb-query,Javascript,Mongodb,Mongodb Query,我有这样一份mongo文档: { "_id" : "EimL8Hf5SsCQKM7WP", "enable" : "no", "collector" : [ { "name" : "prod", "enable" : "no", "transport" : { "address" : {}, "port" : "8000

我有这样一份mongo文档:

{
    "_id" : "EimL8Hf5SsCQKM7WP",
    "enable" : "no",
    "collector" : [ 
        {
            "name" : "prod",
            "enable" : "no",
            "transport" : {
                "address" : {},
                "port" : "8000",
                "protocol" : "http-secure"
            },
            "authentication" : {},
            "notify-syslog" : "yes"
        }, 
        {
            "name" : "test",
            "enable" : "no",
            "transport" : {
                "address" : {},
                "port" : "8000",
                "protocol" : "http-secure"
            },
            "authentication" : {},
            "notify-syslog" : "yes"
        }
    ],
   "misc" : {
        "createdBy" : "someuser",
        "updatedBy" : "someuser",
    }
}
我向用户显示mongo文档的某些字段,以便对其进行编辑。由于其他字段是隐藏的,因此表单的结果将只包含已公开的字段

我最终得到一个修改过的文档对象,如下所示:(注意“name”字段)

我当前的要求是以某种方式将两个文档合并在一起,以便初始文档具有修改文档的所有字段及其字段

结果:

{
    "_id" : "EimL8Hf5SsCQKM7WP",
    "enable" : "no",
    "collector" : [ 
        {
            "name" : "someothername",
            "enable" : "no",
            "transport" : {
                "address" : {},
                "port" : "8000",
                "protocol" : "http-secure"
            },
            "authentication" : {},
            "notify-syslog" : "yes"
        }, 
        {
            "name" : "anothername",
            "enable" : "no",
            "transport" : {
                "address" : {},
                "port" : "8000",
                "protocol" : "http-secure"
            },
            "authentication" : {},
            "notify-syslog" : "yes"
        }
    ],
   "misc" : {
        "createdBy" : "someuser",
        "updatedBy" : "anotheruser",
    }
}
如果您注意到上述情况,则仅更新了名称字段,同时保留了其余字段


我试图使用
collection.update({id},$set:{那么这个“内部处理”数据在哪里?在另一个集合中?在内存中?我们如何知道要将它与哪个文档匹配?如何知道它与哪些数组元素匹配?如何知道要“合并”的集合中的元素没有改变?有更多吗?有更少吗?所以你需要更具体地了解所有这些细节。我已经澄清了我的“内部处理”。除了将某些字段作为表单公开给用户并获取表单对象之外,没有什么奇怪的事发生。这里的关键是“数组”元素。在你的“自动表单”中是否有某种东西将您的“name”值与特定数组元素“绑定”在一起?也许您在这里的示例并不是一个真正的指示,因为这里的数组显示的是内容完全相同的“两个”元素。我在这里想要您的实际用例。因为我们不想做的是通过“索引”进行更新或者覆盖现有内容。是的。这里的违规者是一个包含对象的数组。我正在尝试起草一个更详细的用例,我会在某个时候更新。但我可以保证的是数组元素的位置不会改变,所以我不确定按索引更新是否会重新循环。下面是basics。您可以执行
“$set”:{“collector.0.name”:“someothername”}
0
索引处创建属性,而不覆盖其他所有内容。但是使用这样的精确索引是一种不好的做法。理想情况下,我们可以“匹配”改为按条件更新的数组位置。这是您想要的情况。那么,“内部处理”数据在哪里?在另一个集合中?在内存中?我们如何知道要将其与哪个文档匹配?如何知道它与哪些数组元素匹配?如何知道要“合并”的集合中的元素没有改变?有更多吗?有更少吗?所以你需要更具体地了解所有这些细节。我已经澄清了我的“内部处理”。除了将某些字段作为表单公开给用户并获取表单对象之外,没有什么奇怪的事发生。这里的关键是“数组”元素。在你的“自动表单”中是否有某种东西将您的“name”值与特定数组元素“绑定”在一起?也许您在这里的示例并不是一个真正的指示,因为这里的数组显示的是内容完全相同的“两个”元素。我在这里想要您的实际用例。因为我们不想做的是通过“索引”进行更新或者覆盖现有内容。是的。这里的违规者是一个包含对象的数组。我正在尝试起草一个更详细的用例,我会在某个时候更新。但我可以保证的是数组元素的位置不会改变,所以我不确定按索引更新是否会重新循环。下面是basics。您可以执行
“$set”:{“collector.0.name”:“someothername”}
,在
0
索引处创建属性,而不覆盖其他所有内容。但是使用这样的精确索引是一种不好的做法。理想情况下,我们可以通过标准“匹配”数组的位置以进行更新。这就是您想要的情况。
{
    "_id" : "EimL8Hf5SsCQKM7WP",
    "enable" : "no",
    "collector" : [ 
        {
            "name" : "someothername",
            "enable" : "no",
            "transport" : {
                "address" : {},
                "port" : "8000",
                "protocol" : "http-secure"
            },
            "authentication" : {},
            "notify-syslog" : "yes"
        }, 
        {
            "name" : "anothername",
            "enable" : "no",
            "transport" : {
                "address" : {},
                "port" : "8000",
                "protocol" : "http-secure"
            },
            "authentication" : {},
            "notify-syslog" : "yes"
        }
    ],
   "misc" : {
        "createdBy" : "someuser",
        "updatedBy" : "anotheruser",
    }
}