java mongo忽略大小写,MongoDB中不区分大小写的排序

MongoDB中不区分大小写的排序

如何区分大小写不区分给定字段的MongoDB集合? 默认情况下,我在a-z之前得到A-Z。

我正在使用Java。

7个解决方案

42 votes

更新:截至目前,mongodb具有不区分大小写的索引:

Users.find({})

.collation({locale: "en" })

.sort({name: 1})

.exec()

.then(...)

贝壳:

db.getCollection('users')

.find({})

.collation({'locale':'en'})

.sort({'firstName':1})

更新:此答案已过期,3.4将具有不区分大小写的索引。 请查看JIRA以获取更多信息[https://jira.mongodb.org/browse/SERVER-90]

不幸的是,MongoDB尚没有不区分大小写的索引:[https://jira.mongodb.org/browse/SERVER-90]并且该任务已被推迟。

这意味着当前排序不区分大小写的唯一方法是实际创建一个特定的“小写”字段,然后复制所讨论的排序字段的值(当然是小写)并对其进行排序。

Sammaye answered 2020-01-28T21:01:35Z

41 votes

排序在MongoDB中的工作方式确实与之类似,但是您可以通过聚合即时执行此操作:

取得以下数据:

{ "field" : "BBB" }

{ "field" : "aaa" }

{ "field" : "AAA" }

因此,使用以下语句:

db.collection.aggregate([

{ "$project": {

"field": 1,

"insensitive": { "$toLower": "$field" }

}},

{ "$sort": { "insensitive": 1 } }

])

会产生如下结果:

{

"field" : "aaa",

"insensitive" : "aaa"

},

{

"field" : "AAA",

"insensitive" : "aaa"

},

{

"field" : "BBB",

"insensitive" : "bbb"

}

对于转换时会导致相同键的任何值,将保留实际的插入顺序。

Neil Lunn answered 2020-01-28T21:02:13Z

16 votes

在MongoDB JIRA上,这个问题已经存在很长时间了,但是现在已经解决了。 请查看此发行说明以获取详细文档。 您应该使用collation。

User.find()

.collation({locale: "en" }) //or whatever collation you want

.sort({name:'asc'})

.exec(function(err, users) {

// use your case insensitive sorted results

});

Mladen Janjetovic answered 2020-01-28T21:02:33Z

2 votes

截至目前(mongodb 4),您可以执行以下操作:

mongo shell:

db.getCollection('users')

.find({})

.collation({'locale':'en'})

.sort({'firstName':1});

猫鼬:

Users.find({})

.collation({locale: "en" })

.sort({name: 1})

.exec()

.then(...)

这是mongodb支持的语言和语言环境。

Wajahath answered 2020-01-28T21:03:06Z

1 votes

它在Java中。 我混合了无参数和BasicDBObject的第一个key-val变体,仅用于变体

DBCollection coll = db.getCollection("foo");

List pipe = new ArrayList();

DBObject prjflds = new BasicDBObject();

prjflds.put("field", 1);

prjflds.put("insensitive", new BasicDBObject("$toLower", "$field"));

DBObject project = new BasicDBObject();

project.put("$project", prjflds);

pipe.add(project);

DBObject sort = new BasicDBObject();

sort.put("$sort", new BasicDBObject("insensitive", 1));

pipe.add(sort);

AggregationOutput agg = coll.aggregate(pipe);

for (DBObject result : agg.results()) {

System.out.println(result);

}

Buzz Moschetti answered 2020-01-28T21:03:26Z

1 votes

添加代码.collation({'locale':'en'})帮助解决了我的问题。

Monu Chaudhary answered 2020-01-28T21:03:46Z

-2 votes

我们借助JavaScript数组中的.sort函数来解决此问题

这是代码

function foo() {

let results = collections.find({

_id: _id

}, {

fields: {

'username': 1,

}

}).fetch();

results.sort((a, b)=>{

var nameA = a.username.toUpperCase();

var nameB = b.username.toUpperCase();

if (nameA nameB) {

return 1;

}

return 0;

});

return results;

}

Kevin Alviola answered 2020-01-28T21:04:10Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 MongoDB 的聚合框架来实现按时间排序的语句。具体步骤如下: 1. 使用 `$sort` 操作符将数据按时间字段进行升序或降序排序。例如,假设你的时间字段为 `timestamp`,如果要按照时间先后顺序进行排序,可以使用以下语句: ``` db.collection.aggregate([ { $sort: { timestamp: 1 } } ]) ``` 2. 如果需要按照时间字段进行分组,可以使用 `$group` 操作符。例如,假设你想按照日期(忽略具体时间)进行分组,可以使用以下语句: ``` db.collection.aggregate([ { $sort: { timestamp: 1 } }, { $group: { _id: { $dateToString: { format: "%Y-%m-%d", date: "$timestamp" } }, data: { $push: "$$ROOT" } } } ]) ``` 这个语句将数据按照时间进行排序后,再按照日期进行分组,并将每组的数据存储在一个名为 `data` 的数组。 注意,在使用 `$dateToString` 操作符时,需要使用 MongoDB 支持的日期格式。上面的例子使用了 `"%Y-%m-%d"` 表示日期的格式,具体格式可以根据需要进行调整。 ### 回答2: 可以使用MongoDB的`sort()`方法来实现按时间排序的语句。假设我们有一个名为"collection_name"的集合,其包含一个名为"time"的字段表示时间。 语法如下: ```mongo db.collection_name.find().sort({time: 1}) ``` 上述代码表示对集合"collection_name"的文档按"time"字段进行升序排序。 如果要按时间字段降序排序,可以将`1`改为`-1`,如下所示: ```mongo db.collection_name.find().sort({time: -1}) ``` 使用上述代码,将返回根据"time"字段降序排序的文档集合。 需要注意的是,排序只是对查询结果进行排序,并不会直接修改原始文档的顺序。 ### 回答3: MongoDB是一个非关系型数据库,具有灵活的数据模型。在MongoDB,可以使用find()方法来查询并筛选文档,然后使用sort()方法按照特定字段进行排序。 如果要按时间字段进行排序,首先需要确定时间字段的名称。假设时间字段名为"timestamp",以下是一个按时间排序的示例语句: db.collection.find().sort({timestamp: 1}) 这个语句,db.collection表示要查询的集合名称。find()方法可以省略筛选条件,以查询所有文档。sort()方法用于指定排序方式,参数是一个对象,其键是要按其排序字段名称,值是排序顺序。在示例,{timestamp: 1}表示按照"timestamp"字段升序排列,如果要降序排列,可以将值改为-1,如{timestamp: -1}。 执行以上语句后,将会返回按照时间字段排序后的文档结果。注意,当时间字段为日期类型时,可以直接按照大小进行排序。若时间字段为字符串类型,建议使用ISO日期格式进行存储,以便能正确地排序。 总之,以上语句是一个简单的按时间排序MongoDB查询语句示例,在实际使用可以根据需求灵活运用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值