MongoDB按照嵌套数组中的map的某个key无法正常排序的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MongoDB按照嵌套数组中的map的某个key无法正常排序的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1219字,纯文字阅读大概需要2分钟。
内容图文
前阵子同事有一个需求: 在一个数组嵌套map的结构中,首先按照map中的某个key进行筛选,再按照map中的某个key进行排序,但是奇怪的是数据总是乱序的。
再检查了代码和数据之后并没有发现什么错误,于是自己进行了简单的demo测试,结果基本相同的代码和数据竟然是有序的。
demo如下:
from pymongo import MongoClient from random import randint db = MongoClient(‘mongodb://mongodb_temp‘)[‘mydatabase‘].mycollection for i in range(20): db.insert_one( { "host": "host1", "type": "type1", "data": [ { "t": 10000, "v": randint(0, 100) }, { "t": 10001, "v": randint(0, 100) }, ] }) my_filter = {‘host‘: ‘host1‘, ‘type‘: ‘type1‘, ‘data‘: {‘$elemMatch‘: {‘t‘: 10000}}} projection = {‘host‘: 1, ‘type‘: 1, ‘data‘: {‘$elemMatch‘: {‘t‘: 10000}}} sort_key = ‘data.0.v‘ rs = db.find(my_filter, projection).sort(sort_key, 1) rs = list(rs) for v in rs: print(v["data"][0][‘v‘])
最后竟然发现原来是数据顺序导致的问题,更改数据顺序如下 就会复现问题:
for i in range(20): data_0, data_1 = {"t": 10000, "v": random.randint(0, 100)}, {"t": 10001, "v": random.randint(0, 100)} insert_d = { "host": "host1", "type": "type1", "data": [data_0, data_1] if i != 10 else [data_1, data_0] } db.insert_one(insert_d)
暂时不清楚内部的实现原理,附上我在Stack Overflow的提问: https://stackoverflow.com/questions/65405113/pymongo-use-sort-with-elemmatch-doesnt-work
原文:https://www.cnblogs.com/wikis/p/14265934.html
内容总结
以上是互联网集市为您收集整理的MongoDB按照嵌套数组中的map的某个key无法正常排序的问题全部内容,希望文章能够帮你解决MongoDB按照嵌套数组中的map的某个key无法正常排序的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。