我使用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中插入或更新行为,并且是原子的——上面的例子不是。关于有问题的文档是否被替换,您可以观察WriteResult
的nUpserted
值
参见
https://docs.mongodb.com/manual/reference/method/db.collection.update/#upsert-选项
https://docs.mongodb.com/manual/reference/method/WriteResult/#WriteResult.nUpserted
尽管这个问题很老了,但它仍然会出现在搜索结果中,我以前也看到过这个链接。