mongodb 通过嵌入文档中的字段排序
mongodb中的全部数据:
db.testInfo.find({})
.sort({_id:-1})
.limit(100)
查询结果:
/* 1 createdAt:2019/10/11 下午5:12:50*/
{
"_id" : ObjectId("5da04792665cd81dc0d46d3d"),
"name" : "jim2",
"age" : 5,
"list" : [
{
"title" : "a2",
"price" : 1
},
{
"title" : "a1",
"price" : 5
}
]
}, /* 2 createdAt:2019/10/11 下午5:01:55*/
{
"_id" : ObjectId("5da04503665cd81dc0d46d3c"),
"name" : "leo",
"age" : 4,
"list" : [
{
"title" : "a1",
"price" : 3
},
{
"title" : "d2",
"price" : 2
}
]
}, /* 3 createdAt:2019/10/11 下午5:01:55*/
{
"_id" : ObjectId("5da04503665cd81dc0d46d3b"),
"name" : "jason",
"age" : 3,
"list" : [
{
"title" : "a1",
"price" : 2
},
{
"title" : "c2",
"price" : 1
}
]
}, /* 4 createdAt:2019/10/11 下午5:01:55*/
{
"_id" : ObjectId("5da04503665cd81dc0d46d3a"),
"name" : "mark",
"age" : 2,
"list" : [
{
"title" : "a1",
"price" : 3
},
{
"title" : "b2",
"price" : 4
}
]
}, /* 5 createdAt:2019/10/11 下午5:00:12*/
{
"_id" : ObjectId("5da0449c665cd81dc0d46d39"),
"name" : "jim",
"age" : 1,
"list" : [
{
"title" : "a1",
"price" : 1
},
{
"title" : "a2",
"price" : 2
}
]
}
通过嵌入文档中查询指定title的数据,然后根据price排序,注意需要排序时将查询的title也一并作为排序字段,否则顺序会错乱。
db.testInfo.find({"list.title":"a1"})
.sort({
"list.title":1,
"list.price":1
});
查询结果:
/* 1 createdAt:2019/10/11 下午5:00:12*/
{
"_id" : ObjectId("5da0449c665cd81dc0d46d39"),
"name" : "jim",
"age" : 1,
"list" : [
{
"title" : "a1",
"price" : 1
},
{
"title" : "a2",
"price" : 2
}
]
}, /* 2 createdAt:2019/10/11 下午5:01:55*/
{
"_id" : ObjectId("5da04503665cd81dc0d46d3b"),
"name" : "jason",
"age" : 3,
"list" : [
{
"title" : "a1",
"price" : 2
},
{
"title" : "c2",
"price" : 1
}
]
}, /* 3 createdAt:2019/10/11 下午5:01:55*/
{
"_id" : ObjectId("5da04503665cd81dc0d46d3a"),
"name" : "mark",
"age" : 2,
"list" : [
{
"title" : "a1",
"price" : 3
},
{
"title" : "b2",
"price" : 4
}
]
}, /* 4 createdAt:2019/10/11 下午5:01:55*/
{
"_id" : ObjectId("5da04503665cd81dc0d46d3c"),
"name" : "leo",
"age" : 4,
"list" : [
{
"title" : "a1",
"price" : 3
},
{
"title" : "d2",
"price" : 2
}
]
}, /* 5 createdAt:2019/10/11 下午5:12:50*/
{
"_id" : ObjectId("5da04792665cd81dc0d46d3d"),
"name" : "jim2",
"age" : 5,
"list" : [
{
"title" : "a2",
"price" : 1
},
{
"title" : "a1",
"price" : 5
}
]
}
目前好像根据经纬度范围查询时,无法同时指定嵌入文档中的字段正确排序。只能先通过经纬度范围查询出来所有数据后,再根据嵌入文档中字段进行排序。
特殊情况下是否可以考虑固定嵌入集合数量,指定下标来对应字段排序(未测试过)。
学艺不精,如有其他办法,欢迎留言一起讨论。
mongodb 通过嵌入文档中的字段排序的更多相关文章
- winform 替换word文档中的字段(包含图片添加),生成导出PDF文件(也可是word文件)
1.先打开你需要替换的word文档,在想要后续更换字段值的地方添加“书签”. 2.将模板文档存放在 程序的Debug文件下. 3.生成文件的按钮点击事件 代码: string templatePath ...
- 利用python处理文档中各字段出现的次数并排序
import string path = 'waldnn' with open(path,'r') as text: words = [raw_word.strip(string.punctuatio ...
- MongoDB(12)- 查询嵌入文档的数组
插入测试数据 db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A" ...
- 01将图片嵌入到Markdown文档中
将图片内嵌入Markdown文档中 将图片嵌入Markdown文档中一直是一个比较麻烦的事情.通常的做法是将图片存入本地某个路径或者网络存储空间,使用URL链接的形式插入图片: ![image][ur ...
- Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***.
Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***. Mongodb是一种面向文档的 ...
- shell之实战应用一(查找xml文档中的关键字段)
前几天同事问我一个问题,说如下的文档中,如何把name后面的字段(红色框中的字段)单独打印出来?
- MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))
目录 一.前言 1. 运行环境 二.前期准备工作 1. 创建 MongoDBContext MongoDb操作上下文类 2.创建测试类 3.创建测试代码 三.内嵌数组增加元素操作 1.Update.S ...
- MongoDB 内嵌文档
MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...
- MongoDB学习笔记——文档操作之查询
查询文档 使用db.COLLECTION_NAME.findOne()可以查询所有满足条件的第一条数据 预发格式如下: db.COLLECTION_NAME.findOne(<query> ...
随机推荐
- 什么是ES5?js中的'use strict'是什么?目的是什么?
什么是ES5? ECMA Script5:ECMA(欧洲计算机制造联合会)的第五次改版,2009年. js中的'use strict'是什么? js的严格模式 目的: ①添加更多报错的场合,消除代码的 ...
- 洛谷p1776宝物筛选
宝物筛选 多重背包问题 物品数目已知 可以枚举每个物品 当做01背包来做 不过会超时 此时需要二进制拆分来优化 分解成新的物品 再跑一遍01背包即可 //二进制拆分+01背包 //设f[j]表示前i件 ...
- Git-push和pull分支
查看分支信息:git branch -r 查看所有分支信息:git branch -a 本地推送分支:git push origin branch-name 推送分支前最好先pull分支:git pu ...
- Hotspot的Metaspace
Meta Space是JDK1.8引入的,在JDK1.8使用的是方法区,永久代(Permnament Generation).元空间存储的是元信息,使用的是操作系统的本地内存(Metaspace与Pe ...
- concurrent (二)AQS
参考文档: https://www.cnblogs.com/waterystone/p/4920797.html
- 解决solr 请求参数过长报错too many boolean clauses Exception
booleanClauses属性的意义 貌似是查询条件有几个逻辑判断而不是参数长度. 如下面两种情况 a:1 OR b:2 AND C:3那么此时booleanClauses=3 id(1 2 3 4 ...
- SQLServer ---------- 安装SQLserver数据库
1.安装SQLserver 数据2008 的地址 https://jingyan.baidu.com/article/948f592434b407d80ef5f97d.html?qq-pf-to=pc ...
- SpringBoot扩展点之二:ApplicationRunner和CommandLineRunner的扩展
CommandLineRunner并不是Spring框架原有的概念,它属于SpringBoot应用特定的回调扩展接口: public interface CommandLineRunner { /** ...
- BJFU-225-基于链表的两个递增有序序列的合并
#include<stdio.h> #include<stdlib.h> typedef struct Lnode{ int num; struct Lnode * next; ...
- [SOJ #721]第三送分题(2019-11-14考试)/[CF675E]Trains and Statistic
题目大意 在一条直线上有\(n\)个点.在第\(i\)个点可以花费\(1\)的代价到达\((i,a_i]\)中任意一点,用\(S[i][j]\)表示从点\(i\)到点\(j\)的最少花费,求\(\su ...