我想使用 php 在 mongodb 的字段中添加自动增量值,而不使用计数记录,下一个数字(计数 + 1)将是我的增量值......或者有什么方法可以在mongodb
,php
中创建自动增量值数组示例一个客户有多个电子邮件和地址,然后我们可以将其存储为email[{1:'a@x.com',2:'demo@example.com'},...]
相同,address[{1:'Indore',2:'Dewas'},...]
因此为了唯一性,我想从每个电子邮件和地址设置自动增量值..
问问题
7258 次
4 回答
2
如果您创建两个集合是可能的
首先存储要为其创建自动增量编号的字段,例如
// Inserting 2 records for which we want to create auto-increment numbers
db.autoincrementcollection.insert({
field_id: "register_id",
nextId: 0
},
{
field_id: "user_id",
nextId: 0
});
// Function is used to get the next autoincremented value
function getNextId(field)
{
var ret = db.autoincrementcollection.findAndModify({
query: { field_id: field },
update: { $inc: { nextId: 1 } },
new: true
});
return ret.nextId;
}
您要在其中使用递增数字的第二个,例如
// inserting data in registration collection with register_id auto-increment number
db.registration.insert({
_id: getNextId("register_id"),
fname: "Rohan",
lname:"Kumar"
});
// inserting data in user collection with user_id auto-increment number
db.users.insert({
_id: getNextId("user_id"),
name: "Rohan Kumar"
});
findAndModify()可能在使用PHP的代码时不起作用,那么您可以使用find()和/或update()
请参阅文档以了解创建自动递增字段
于 2013-09-26T05:13:45.990 回答
1
有可能我们必须获得最大 id 表单集合
db -> collection -> find() -> sort(array('id' => -1)) -> limit(1)
它返回最大 id 数组。添加db['id'] + 1 ;
每次都不需要在mongo中存储自增id
于 2017-03-06T17:58:27.677 回答
0
理想情况下,您不应该在 MongoDb 中使用自动增量作为标识符。如果您愿意,请参考此处给出的 2 个好方法:
http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field
于 2012-03-29T08:44:53.497 回答
0
这是我在 MongoDB PHP 库中创建自动增量 ID 的方法:
private function get_last_id()
{
// put your connection string blow
$client = new MongoDB\Client('');
$counterCollection = $client->collection->counter;
$counter["id"]=1;
if ($counterCollection->count()<=0) {
$insertOneResult = $counterCollection->insertOne($counter);
} else {
$filter = [];
$options = ['sort' => ['_id' => -1], 'limit' => 1];
$doc = $counterCollection->findOne($filter, $options);
$id=$doc->id+1;
$updateResult = $counterCollection->updateOne(
[ '_id' => $doc->_id ],
[ '$set' => [ 'id' =>$id ]]
);
return $id;
}
}
于 2018-08-14T10:24:24.243 回答