检查集合中是否存在文档,如果不存在,则添加新文档


Check if a document exists in the collection, if not add a new document

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

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

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

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

任何帮助都将不胜感激。

使用这种方法。

  <?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资源

到目前为止,最好的选择是使用update操作的upsert选项。这个特性允许在MongoDB中插入或更新行为,并且是原子的——上面的例子不是。关于有问题的文档是否被替换,您可以观察WriteResultnUpserted

参见

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

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

尽管这个问题很老了,但它仍然会出现在搜索结果中,我以前也看到过这个链接。