我正在使用MongoDB和PHP来存储用户通过基本表单添加的歌曲。我创建的集合如下所示。
$object = array(
"trackName" => "Sju sorger",
"artistName" => "Veronica Maggio",
"albumName" => "Satan i Gatan",
);
$collection->save($object);
我想要完成的是检查一首歌是否已经在该集合中。如果试图添加的歌曲用户尚未加入该集合,则会添加该歌曲。如果它已经在集合中,则会显示一条通知,说明该歌曲已经在该集合中。
我对MongoDB比较陌生,但我想我可以通过检查文档的 _id 来检查歌曲是否已经在集合中。但我不知道如何做到这一点。
非常感谢任何帮助。
答案 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());
}
?>
进一步使用此资源。
答案 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
这个问题虽然很老,但是仍然会在搜索结果中弹出,我之前已经看到了这个问题。