MongoDB v2.4.9 按布尔字段排序
问题:MongoDB v2.4.9 按布尔字段排序 如何根据布尔字段对查询结果进行排序? 考虑以下集合: { "_id" : ObjectId("..."), "name" : "John" , "isFoo" : true} { "_id" : ObjectId("..."), "name" : "Jim" , "isFoo" : false} { "_id" : ObjectId("...")
·
问题:MongoDB v2.4.9 按布尔字段排序
如何根据布尔字段对查询结果进行排序?
考虑以下集合:
{ "_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}
我需要一个查询,它将首先返回isFoo == true
,然后返回isFoo == false
文档。换句话说,我需要按布尔字段排序。
以下代码无法解决问题,因为我仍然得到一些带有isFoo == true
的文档与虚假文档混合在一起。
db["users"].find().sort( { isFoo: 1 } )
想法?
解答
上面的代码有效,我的数据很糟糕。正如我在上面的评论中所写,一些文档将 isFoo 作为字符串(不是布尔值),这就是我看到混合结果的原因。
我不得不将字段的类型从 String 更改为 Boolean 所以我尝试了这个:
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = new Boolean(x.isFoo); db.users.save(x); });
但这只是将所有 isFoo 字段都变成了对象。
看到我真的厌倦了处理这个问题,我只是使用以下内容将所有 isFoo 字段设置为 false 并手动处理更改。
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = false; db.users.save(x); });
这很烦人。
更多推荐
已为社区贡献32870条内容
所有评论(0)