MongoDB v2.4.9按布尔字段排序

McM*_*eep 8 database sorting mongoose mongodb

如何根据布尔字段对查询结果进行排序?

考虑以下集合:

{ "_id" : ObjectId("..."), "name" : "John" , "isFoo" : true}
{ "_id" : ObjectId("..."), "name" : "Jim" , "isFoo" : false}
{ "_id" : ObjectId("..."), "name" : "Joel" , "isFoo" : false}
{ "_id" : ObjectId("..."), "name" : "Jill" , "isFoo" : true}
{ "_id" : ObjectId("..."), "name" : "Samantha" , "isFoo" : true}
Run Code Online (Sandbox Code Playgroud)

我需要一个将返回第isFoo == true一个和isFoo == false第二个文档的查询.换句话说,我需要按布尔字段排序.

下面的代码不起作用,因为我仍然得到一些isFoo == true与假的混合的文档.

db["users"].find().sort( { isFoo: 1 } )
Run Code Online (Sandbox Code Playgroud)

想法?

McM*_*eep 6

上面的代码有效,我的数据不好。正如我在上面的评论中所写的那样,一些文档将 isFoo 作为字符串(不是布尔值),这就是我看到混合结果的原因。

我不得不将字段的类型从 String 更改为 Boolean 所以我尝试了这个:

db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) {   x.isFoo = new Boolean(x.isFoo);    db.users.save(x); });
Run Code Online (Sandbox Code Playgroud)

但这只是将所有 isFoo 字段变成了对象。

看到我真的厌倦了处理这个问题,我只是使用以下方法将所有 isFoo 字段设置为 false 并手动处理更改。

db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) {   x.isFoo = false;    db.users.save(x); });
Run Code Online (Sandbox Code Playgroud)

这很烦人。