Php MongoDB-如何使用自动增量功能插入记录
我正在跟踪这里找到的文档 我有两个计数器,一个叫做locationid,另一个叫做playhistid。 这就是它们的样子:Php MongoDB-如何使用自动增量功能插入记录,php,mongodb,Php,Mongodb,我正在跟踪这里找到的文档 我有两个计数器,一个叫做locationid,另一个叫做playhistid。 这就是它们的样子: { "_id" : "locationid", "seq" : 0 } { "_id" : "playhistid", "seq" : 0 } 我还创建了以下函数: function getNextSequence(name) { var ret = db.counters.findAndModify( {
{
"_id" : "locationid",
"seq" : 0
}
{
"_id" : "playhistid",
"seq" : 0
}
我还创建了以下函数:
function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);
现在我需要一种从PHP调用getNextSequence(“locationid”)
的方法。到目前为止,我的代码是这样的:
function add_playbook_history_record($location)
{
$m = new MongoClient("mongodb://10.1.1.111:27017");
$db = $m->testdb;
$collection = $db->testcollection;
$cursor = $collection->insert($location);
}
如您所见,我没有调用getNextSequence()函数,因为我不知道如何在中执行此操作。我在这个网站上发现了一个类似的问题:
但是。。。它们实际上并没有展示如何在PHP中实现这一点。他们只是展示mongo文档中的材料
编辑1
我想的是尝试找到一种使用db->command()方法运行getNextSequence()的方法。。。然后向我的$location数组添加一个新项,如下所示:
$location["_id"] = value_from_db_command;
您需要在$location中添加_id字段。 而且_id必须是您的inc id。 例如: 我的建议是:在FindModify中添加upsert 它对您有用:
function getNextSequence($name)
{
$m = new MongoClient("mongodb://10.1.1.111:27017"); // In a real project, you do not need all the time to re-create the connection
$db = $m->testdb;
$collection = $db->counters;
$result = $collection->findAndModify(
['_id' => $name],
['$inc' => ['seq' => 1]],
['seq' => true],
['new' => true, 'upsert' => true]
);
if (isset($result['seq']))
{
return $result['seq'];
}
else
{
return false;
}
}
在实际项目中,您不需要一直重新创建连接
您可以创建MongoDatabase(此模式为Singleton)
和调用需要方法
MongoDatabase::getInstance()->selectCollection('counters')->findAndModify(...)
我们有可能获得最大id表单集合
db->collection->find()->sort(array('id' => -1))->limit(1)
它返回最大id数组。添加db['id']+1代码>
每次都不需要在mongo中存储自动增量id您能解释一下upsert的用途吗?另外,php如何“知道”getNextSequence()函数是什么?你能解释一下吗?当然,代码应该是“$db->getNextSequence”吗。upsert-表示如果集合中不存在该条目,它将创建。至于方法,则简单得多。您必须在php上编写它。(更新了上面的例子)马克西姆,我现在要离开办公室,但我明天第一件事就是复习你更新的答案!!谢谢但我的下一个问题是什么是反模型::类?反模型-它是隐藏的东西:1。连接到数据库2。集合的选择也是因为类MongoDatabase{static function getInstance(){…}},您调用MongoDatabase::getInstance()->selectCollection('counters')->FindModifyMaxim,我尝试了$result=MongoDatabase::getInstance()->selectCollection('counters')->FindModifyMaxim(还有对CounterModel的调用,但都失败了,错误是php找不到该类
MongoDatabase::getInstance()->selectCollection('counters')->findAndModify(...)
db->collection->find()->sort(array('id' => -1))->limit(1)