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