【问题标题】:Add value to object in MongoDB在 MongoDB 中为对象添加值
【发布时间】:2014-12-11 09:42:35
【问题描述】:

我在 MongoDB 中有 json 对象。我想为这个对象添加一个值,例如在位置 -> 机器 -> 传感器中。我知道机器、位置和传感器的 _id。最有效的方法是什么?

    array(
    "_id" => '547f2e4cb54b3a96203c9869',
    "name" => Array (
        "nl" => "klant1"
    ),
    "locations" => Array (
        Array (
            "_id" => "1",
            "name" => Array (
                "nl" => "location1",
            ),
            "machines" => Array (
                Array (
                    "_id" => "1",
                    "name" => Array (
                        "nl" => "boot1"
                    ),
                    "sensors" => Array (
                        Array (
                            "_id" => "1",
                            "log" => Array (
                            )
                        ),
                        Array (
                            "_id" => "2",
                            "log" => Array (
                            )
                        )
                    )
                ),
                Array (
                    "_id" => "2",
                    "name" => Array (
                        "nl" => "boot2"
                    ),
                    "sensors" => Array (
                        Array (
                            "_id" => "1",
                            "log" => Array (
                            )
                        ),
                        Array (
                            "_id" => "2",
                            "log" => Array (
                            )
                        )
                    )
                ), 
                Array (
                    "_id" => "3",
                    "name" => Array (
                        "nl" => "boot3"
                    ),
                    "sensors" => Array (
                        Array (
                            "_id" => "1",
                            "log" => Array (
                            )
                        ),
                        Array (
                            "_id" => "2",
                            "log" => Array (
                            )
                        )
                    )
                )
            )
        )
    )

【问题讨论】:

  • 您能否发布您的架构,以提高可读性。
  • 你应该使用 MySQL。 ;)
  • 要匹配嵌套深度为 2 的数组,每个级别都有一个 _id,需要 SERVER-831。通常,解决此问题的方法(以及最终通常会产生更好结果的方法)是重新设计模式,以便没有嵌套数组。但是,如果不深入了解您的用例,很难说如何最好地做到这一点。

标签: php mongodb mongodb-php


【解决方案1】:

超级简单。您可以拨打findAndModify 电话。或者,如果您想更手动地进行操作,您可以这样做:

$collection = $mongo->your_collection;
$obj = $collection->findOne($query);
$obj = $obj['locations']['machines']['sensors'][] = $new_sensor;
$collection->save($obj);

Mongo 足够聪明,可以使用 _id 键识别对象,这会导致它将这些保存视为对现有对象的更新。没有它,您将使用它创建新对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2016-08-13
    • 2022-08-22
    • 1970-01-01
    • 2021-09-07
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多