mongodb 通過嵌入文檔中的欄位排序

来源:https://www.cnblogs.com/yangyuping/archive/2019/10/11/11655752.html
-Advertisement-
Play Games

mongodb中的全部數據: 查詢結果: 通過嵌入文檔中查詢指定title的數據,然後根據price排序,註意需要排序時將查詢的title也一併作為排序欄位,否則順序會錯亂。 查詢結果: ...


 

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
		}
	]
}

目前好像根據經緯度範圍查詢時,無法同時指定嵌入文檔中的欄位正確排序。只能先通過經緯度範圍查詢出來所有數據後,再根據嵌入文檔中欄位進行排序。

特殊情況下是否可以考慮固定嵌入集合數量,指定下標來對應欄位排序(未測試過)。

學藝不精,如有其他辦法,歡迎留言一起討論。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網上搜的源,什麼阿裡雲163等等的,都不支持arm64 執行以下代碼,使用華為源 ...
  • "點我查看秘籍連載" 操作系統的服務埠:系統調用 用戶進程工作在用戶態,它是受限的,很多涉及到硬體的操作都無法執行,但是它們又想要取得結果,就只能請求工作在內核態的操作系統幫助完成這些操作,並將操作結果交給用戶進程。 系統調用 (system call)就是操作系統提供給用戶進程請求操作系統做一些 ...
  • 安裝最簡單的環境: apt-get install gnome-shell apt-get install gnome-panel apt-get install gnome-menus apt-get install gnome-session apt-get install gdm 安裝vncs ...
  • Samba服務: 本內容為samba服務學習者提供參考 案例描述: 某公司的管理員需要搭建SAMBA伺服器,IP地址及允許的訪問網段自定義。SAMBA伺服器的安全級別為user級,所在工作組為WORKGROUP,使添加的用戶可以訪問其個人目錄及共用目錄/smb_share,並可以對目錄讀、寫、執行。 ...
  • 背景分析 消息隊列這個類型的組件一直是非常重要的組件,當經過兩家企業後我就很堅信這個結論了。隊列這種東西,最廣泛的作用還是在於解耦,寬泛一點的說,它可以將不同部門的工作內容進行有效的整合,基於一個約定好的格式,就可以兩頭互相不幹擾的進行開發。可以說這個生產消費的思想不僅僅適用於程式也適用於非常多的地 ...
  • [20191011]拆分rowid 2.txt--//有了鏈接http://blog.itpub.net/267265/viewspace-2659612/=>[20191011]bash任意進位編碼表.txt --//轉化拆分rowid在bash變得非常容易,自己寫一個腳本看看.--//Rowid ...
  • 使用 Windows 身份驗證方式登錄 出現錯誤 無法連接到 本地伺服器 解決問題: SQL server配置管理器:服務遠程過程調用失敗 https://blog.csdn.net/gfjjggg/article/details/83721445 修改TCP/IP屬性:https://www.cn ...
  • 創建一個只讀用戶user2,只能查詢管理員用戶user1下的表,不能增刪改。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...