我正在尝试用mongoose和MongoDB创建一个注册表单.我有一个唯一的密钥,UserId,每次我创建一个新的条目时,我想在数据库中获取最大的UserId并将其增加一个.我尝试过,db.user.find({}).sort({userId: 1});但似乎没有工作.谢谢
Masiar
您可以这样做以获得当前最高的用户UserId:
db.user.insert( { UserId: 1 } )
db.user.insert( { UserId: 2 } )
db.user.insert( { UserId: 3 } )
db.user.find().sort( { UserId: -1 } ).limit(1)
Run Code Online (Sandbox Code Playgroud)
值得注意的是,MongoDB中没有办法获取此值并在单个原子事务中插入新用户,它只支持单个文档的原子操作.您需要注意另一个操作没有同时插入另一个用户,最终可能会有两个具有相同UserId的用户.
迭代游标并将返回的doc放入数组中:
var myArray = [];
User.find().sort('UserId','descending').limit(1).each(function(err, doc) {
myArray.push(doc);
});
Run Code Online (Sandbox Code Playgroud)
您想要做的事情听起来更像是具有自动增量的关系数据库的模式.我会推荐另一种解决方案.
起初你已经拥有一个唯一的ID.它会自动创建并位于"_id"字段中.对我来说,似乎你想拥有一个用于构建关系的UserID,但你已经使用了_id中的值.
你想要增加id的另一个原因可能是你创建了一个web应用程序并且可能需要"更好"的URL?例如./ user/1而不是/ user/abc48df ...?
如果是这种情况,我宁愿在用户名上创建唯一约束.而不是id,你在网址"/ user/john"中使用你的用户名.
有了这个你的网址更好.对于构建关系,您可以使用_id.并且你不会遇到问题,首先是最高数字.
要创建唯一索引:
db.collection.ensureIndex({username: 1}, {unique: true})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6643 次 |
| 最近记录: |