如果没有添加新文档,请检查集合中是否存在文档

时间:2012-03-13 14:52:35

标签: php mongodb mongoid

我正在使用MongoDB和PHP来存储用户通过基本表单添加的歌曲。我创建的集合如下所示。

$object = array(
    "trackName" => "Sju sorger",
    "artistName" => "Veronica Maggio",
    "albumName" => "Satan i Gatan",
     );
$collection->save($object);

我想要完成的是检查一首歌是否已经在该集合中。如果试图添加的歌曲用户尚未加入该集合,则会添加该歌曲。如果它已经在集合中,则会显示一条通知,说明该歌曲已经在该集合中。

我对MongoDB比较陌生,但我想我可以通过检查文档的 _id 来检查歌曲是否已经在集合中。但我不知道如何做到这一点。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

使用这种方法。

  <?php
    try {
      // open connection to MongoDB server
      $conn = new Mongo('localhost');

      // access database
      $db = $conn->test;

      // access collection
      $collection = $db->items;

      // GET TRACK NAME
      $trackname = 'placetracknamehereifsearchingbytrackname';
      // retrieve existing document
      $criteria = array(
        'trackName' => trackname ,
      );
      $doc = $collection->findOne($criteria);

      if(!empty($doc) {
         echo 'Data Already Exist';
      } else {
  // insert a new document
  $object = array(
    "trackName" => "Sju sorger",
    "artistName" => "Veronica Maggio",
    "albumName" => "Satan i Gatan",
     );
     $collection->save($object);
     echo 'Added Successfully!';
}
      // disconnect from server
      $conn->close();
    } catch (MongoConnectionException $e) {
      die('Error connecting to MongoDB server');
    } catch (MongoException $e) {
      die('Error: ' . $e->getMessage());
    }
    ?>

进一步使用此资源。

Mongo Resource

答案 1 :(得分:0)

到目前为止,最好的选择是使用upsert操作的update选项。此功能允许在MongoDB中进行插入或更新行为,并且是原子的-上面的示例不是。关于是否替换了有问题的文档,您可以观察nUpserted的{​​{1}}值

请参见

https://docs.mongodb.com/manual/reference/method/db.collection.update/#upsert-option

https://docs.mongodb.com/manual/reference/method/WriteResult/#WriteResult.nUpserted

这个问题虽然很老,但是仍然会在搜索结果中弹出,我之前已经看到了这个问题。