【问题标题】:Strange output after insert data in mongo database在mongo数据库中插入数据后奇怪的输出
【发布时间】:2014-05-25 04:06:45
【问题描述】:

当我将数组插入 mongoDB 时,我得到了一个奇怪的输出。这是我要插入的数组:

Array
(
    [category_id] => Array
        (
            [id] => -5235252552
            [name] => TestCategory
        )
    [data1] => D01
    [data2] => I
    [data3] => 0
)

我的做法是:

  $mongo->db->selectCollection($mongoTable)->insert(
                                    array(
                                      $data,
                                    )
                                );

这是我得到的数据库中的输出:

array (
  '_id' => new MongoId("53478c1eea1522a3777059b3"),
  '0' => // This don't needs to be here''
  array (
    'category_id' => 
    array (
      'id' => '-5235252552',
      'name' => 'TestCategory',
    ),
    'data1' => 'D01',
    'data2' => 'I',
    'data3' => '0',
  ),
)

如您所见,我的数据库中有奇怪的密钥,我不需要它。所以,零('0')不需要在那里。我想得到的数据库结果是:

array (
  '_id' => new MongoId("53478c1eea1522a3777059b3"),
  'category_id' => 
    array (
      'id' => '-5235252552',
      'name' => 'TestCategory',
    ),
    'data1' => 'D01',
    'data2' => 'I',
    'data3' => '0',
  ),
)

提前致谢

【问题讨论】:

    标签: php mongodb


    【解决方案1】:

    你插入了数组,所以把它改成

    $mongo->db->selectCollection($mongoTable)->insert($data);
    

    你会得到正确的输出。键是特殊的 mongoDB 对象,它是必需的并且是自动生成的。

    【讨论】:

    • 加一个空格,使代码行格式正确。
    • 是的,但是当我尝试这样做时,我得到了这个错误:异常'MongoException'和消息''。键中不允许:05.11 MÅTT BREDD,VÄGGÖPPNING (mm)' 在 /data/www/html/dev/components/com_door/helpers/migrate.php:120 堆栈跟踪:#0 /data/www/html/dev/components /com_door/helpers/migrate.php(120): ......
    • 正如你在上面看到的,我只是写了一个例子。在我的第一篇文章中不是真正的键和值。也许 mongoDB 中的键不能包含特殊字符 VÄGGÖPPNING 并且如果我想将它们放在根级别则不能以数字开头...
    • 是的,我想是的。
    • 如果你在 mongo shell 中尝试(因此在 JavaScript 中),重要的一点是使用 { 'key': foo } 而不是 { key: foo } 如果键以数字开头或有特殊字符。不知道如何通过 PHP 驱动程序重复此操作。
    【解决方案2】:

    您的插入将其包装到一个数组()中,所以 MongoDB 是正确的。不要换行,只需插入 $data。

    【讨论】:

    • 大部分肯定是对的,但可以做更多解释,例如两种形式如何序列化的示例。
    • 您插入了数组($data) 而不仅仅是 $data。
    【解决方案3】:

    再举一个例子,即使 MongoDB 为您添加了 _id 值,您实际上所做的是:

    $data = array(
      '_id' => "123", array(
      'category_id' => array(
          'id' => '-5235252552',
          'name' => 'TestCategory',
      ),
      'data1' => 'D01',
      'data2' => 'I',
      'data3' => '0',
    ));
    
    echo json_encode( $data, JSON_PRETTY_PRINT ) ."\n";
    

    这只是为了向您展示发生了什么。所以再次不添加_id 你希望你的数据是这样的:

    $data = array(
      '_id' => "123",
      'category_id' => array(
          'id' => '-5235252552',
          'name' => 'TestCategory',
      ),
      'data1' => 'D01',
      'data2' => 'I',
      'data3' => '0',
    );
    
    echo json_encode( $data, JSON_PRETTY_PRINT ) ."\n";
    

    因此,当您添加到 mongo 时,只需执行以下操作:

    $mongo->db->selectCollection($mongoTable)->insert($data):
    

    然后一切都很好。

    【讨论】:

      【解决方案4】:
      $m = new MongoClient("localhost");
      

      $datab = $m->selectDB("测试");
      $collection = $datab->selectCollection("用户");

      //在此处插入数据

      $datab = $collection->insert($data, array('$data' => 1));

      $results = $collection->find();

      foreach($results as $test) {
      print_r($test);
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 2014-02-06
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多