MongoDB按“数字”升序排序

时间:2011-05-19 09:42:04

标签: mongodb mongoose

我正在尝试使用mongoose和MongoDB创建注册表单。我有一个唯一的密钥,UserId,每次我创建一个新的条目时,我想在数据库中获取最大的UserId并将其增加一个。 我试过db.user.find({}).sort({userId: 1});,但似乎没有用。 感谢

Masiar

2 个答案:

答案 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})