首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将信息附加到mongo文档中?

如何将信息附加到mongo文档中?
EN

Stack Overflow用户
提问于 2016-11-04 14:46:07
回答 2查看 2.5K关注 0票数 0

背景信息

我的mongo数据库中有以下数据:

代码语言:javascript
复制
{ "_id" : 
       ObjectId("581c97b573df465d63af53ae"), 
       "ph" : "+17771111234", 
       "fax" : false, 
       "city" : "abd", 
       "department" : "", 
       "description" : "a test" 
}

我现在正在编写一个脚本,它将遍历一个CSV文件,其中包含我需要附加到文档中的数据。例如,数据可能如下所示:

代码语言:javascript
复制
+17771111234, 10:15, 12:15, test@yahoo.com
+17771111234, 1:00, 9:00, anothertest@yahoo.com

最后,我想得到一份像这样的mongo文档:

代码语言:javascript
复制
{ "_id" : 
       ObjectId("581c97b573df465d63af53ae"), 
       "ph" : "+17771111234", 
       "fax" : false, 
       "city" : "abd", 
       "department" : "", 
       "description" : "a test",
       "contact_locations": [
           {
              "stime": "10:15", 
              "etime": "12:15", 
              "email": "test@yahoo.com"
           },
           {
              "stime": "1:00", 
              "etime": "9:00", 
              "email": "anothertest@yahoo.com"
           },
       ]
}

问题

我编写的代码实际上是创建新文档,而不是附加到现有文档中。实际上,它甚至没有在CSV文件中每一行创建一个新文档.但我还没有完全理解原因。

对于csv文件中的每一行,我运行以下逻辑

代码语言:javascript
复制
while(!$csv->eof() && ($row = $csv->fgetcsv()) && $row[0] !== null) { 
   //code that massages the $row into the way I need it to look.
   $data_to_submit = array('contact_locations' => $row);
   echo "proving that the record already exists...: <BR>";
   $cursor = $contact_collection->find(array('phnum'=>$row[0]));   
   var_dump(iterator_to_array($cursor));

   echo "now attempting to update it....<BR>";
   // $cursor = $contact_collection->update(array('phnum'=>$row[0]), $data_to_submit, array('upsert'=>true));
        $cursor = $contact_collection->insert(array('phnum'=>$row[0]), $data_to_submit);
   echo "AFTER UPDATE <BR><BR>";
   $cursor = $contact_collection->find(array('phnum'=>$row[0]));
   var_dump(iterator_to_array($cursor));
   }
}

问题

  1. 有什么方法可以“附加”文档吗?还是需要抓取现有文档,保存为数组,将联系人位置数组与主文档合并,然后重新保存?
  2. 如何查询"contact_locations“对象是否已经存在于文档中?
EN

Stack Overflow用户

回答已采纳

发布于 2016-11-04 15:02:45

嗨,是的,你能做到的!

首先,您需要找到您的文档并推送所需的新值:

使用findAndModify$addToSet

代码语言:javascript
复制
$cursor = $contact_collection->findAndModify(
     array("ph" => "+17771111234"),
     array('$addToSet' => 
        array(
            "contact_locations" => array(
                 "stime"=> "10:15", 
                 "etime"=> "12:15", 
                 "email"=> "test@yahoo.com"
            )
        )
     )
);

最好的部分是$addToSet不会添加2次相同的内容,所以您不会有两倍相同的值:)

这里是docs https://docs.mongodb.com/manual/reference/operator/update/addToSet/

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40425533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档