运算符 $natural 强制查询使用集合中文档的自然顺序。 它可用于排序作以插入文档的顺序或反向顺序检索文档。 当需要可预测排序而不依赖于索引字段时,此运算符非常有用。
Syntax
{
$natural: <1 | -1>
}
参数
| 参数 | Description |
|---|---|
1 |
按正向自然顺序排序(插入顺序)。 |
-1 |
按反向自然顺序排序(反向插入顺序)。 |
例子
请考虑商店集合中的这个示例文档。
{
"_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
"name": "First Up Consultants | Bed and Bath Center - South Amir",
"location": {
"lat": 60.7954,
"lon": -142.0012
},
"staff": {
"totalStaff": {
"fullTime": 18,
"partTime": 17
}
},
"sales": {
"totalSales": 37701,
"salesByCategory": [
{
"categoryName": "Mattress Toppers",
"totalSales": 37701
}
]
},
"promotionEvents": [
{
"eventName": "Price Drop Palooza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 30
}
},
"discounts": [
{
"categoryName": "Bath Accessories",
"discountPercentage": 18
}
]
}
]
}
示例 1:基本自然顺序排序
此查询按插入集合的顺序检索所有存储。
db.stores.find({}).sort({
$natural: 1
})
示例 2:反向自然顺序
此查询以反向插入顺序返回所有存储,最近添加的文档首先出现。
db.stores.find({}).sort({
$natural: -1
})
示例 3:使用筛选的自然顺序
此查询筛选总销售额大于 50,000 的存储,并按自然插入顺序返回它们。
db.stores.find({
"sales.totalSales": {
$gt: 50000
}
}).sort({
$natural: 1
})
示例 4:使用投影的自然顺序
此查询仅以自然插入顺序返回商店名称、总销售额和位置坐标。
db.stores.find({}, {
name: 1,
"sales.totalSales": 1,
"location.lat": 1,
"location.lon": 1
}).sort({ $natural: 1 })
示例 5:具有限制的自然顺序
此查询按其自然插入顺序返回前三个存储。
db.stores.find({}).sort({
$natural: 1
}).limit(3)
用例
在以下方案中, $natural 作员非常有用:
- 审核线索:需要按顺序处理文档时,会创建它们
- 时间顺序处理:对于插入顺序很重要的时间敏感数据
- 批处理:在不带索引的情况下按可预测顺序处理文档时
- 调试:了解集合中文档的自然存储顺序
相关内容
- 查看用于 从 MongoDB 迁移到 Azure DocumentDB 的选项。
- 详细了解 与 MongoDB 的功能兼容性。