mongo将字段添加到文档($ set不)

时间:2011-11-23 04:25:51

标签: php mongodb

我想要的是什么:

  • 获取一些文件
  • 对于每个文档,设置一个字段:
    • 更改它(如果存在)
    • 添加它,如果它没有

我的所作所为:

// fresh data
print_r(iterator_to_array($collection->find()->limit(2)));

// query
$docs = $collection->find()->limit(2);
// fetch
foreach ( $docs AS $id => $doc ) {
  // update
  $collection->update(array('_id' => $doc['_id']), array(
    '$set' => array(
      'existing_field' => 'x',
      'new_field' => 'y',
    ),
  ), array('multiple' => false));
}

// verify
print_r(iterator_to_array($collection->find()->limit(2)));

为什么没有做任何事情?现有字段未更改,并且未添加新字段。条件可能是错的吗?

PS。完整的代码(中间有很多垃圾):http://pastebin.com/CNfCVxex
第33-37行 - 新数据
第63-76行 - 查询,获取&更新
第79-80行 - 验证

2 个答案:

答案 0 :(得分:1)

不熟悉您在此处使用的驱动程序,但根据您的描述,您可以在单个数据库命中中实现您想要的功能,无需获取/循环/更新..

$ set运算符将根据字段是否存在来插入或更新字段。

db.Collection.update({}, { $set : { "myfield" : "x" } }, false, true)

上面会将集合中所有文档中的“myfield”字段设置为“x”,或者如果它已经存在,则会将值更改为“x”。那是你想要实现的目标吗?

答案 1 :(得分:0)

我怀疑您需要使用$doc['_id']将字符串new MongoId转换回MongoId。请参阅本页底部的示例:http://www.php.net/manual/en/class.mongoid.php