本文演示如何在 MongoDB 中对嵌套文档(Hash/Object)内的字段执行 $gt (Greater Than) 比较查询,使用 Dot Notation 访问嵌套字段。
创建示例数据
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":1000,"PlayerLevel":2},"PlayerName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7eba41a844af18acdffa9") }
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":0,"PlayerLevel":1},"PlayerName":"Robert"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ebbb1a844af18acdffaa") }
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":-10,"PlayerLevel":0},"PlayerName":"Larry"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ebd41a844af18acdffab") }
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":1,"PlayerLevel":1},"PlayerName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ebe31a844af18acdffac") }
显示所有数据
> db.performQueryDemo.find().pretty();
{ "_id" : ObjectId("5cd7eba41a844af18acdffa9"), "PlayerDetails" : { "PlayerScore" : 1000, "PlayerLevel" : 2 }, "PlayerName" : "Chris" }
{ "_id" : ObjectId("5cd7ebbb1a844af18acdffaa"), "PlayerDetails" : { "PlayerScore" : 0, "PlayerLevel" : 1 }, "PlayerName" : "Robert" }
{ "_id" : ObjectId("5cd7ebd41a844af18acdffab"), "PlayerDetails" : { "PlayerScore" : -10, "PlayerLevel" : 0 }, "PlayerName" : "Larry" }
{ "_id" : ObjectId("5cd7ebe31a844af18acdffac"), "PlayerDetails" : { "PlayerScore" : 1, "PlayerLevel" : 1 }, "PlayerName" : "David" }
查询:PlayerDetails.PlayerScore > 0 的玩家
> db.performQueryDemo.find({"PlayerDetails.PlayerScore":{$gt:0}});
结果
{ "_id" : ObjectId("5cd7eba41a844af18acdffa9"), "PlayerDetails" : { "PlayerScore" : 1000, "PlayerLevel" : 2 }, "PlayerName" : "Chris" }
{ "_id" : ObjectId("5cd7ebe31a844af18acdffac"), "PlayerDetails" : { "PlayerScore" : 1, "PlayerLevel" : 1 }, "PlayerName" : "David" }
Dot Notation 访问嵌套字段
"PlayerDetails.PlayerScore"- 点号分隔层级,查询嵌套对象的字段- 支持任意深度:
"level1.level2.level3.field" - 也适用于 Array 中的 Object:
"items.0.price","items.price"(匹配任一元素)
比较操作符完整列表
| Operator | 含义 | 示例 |
|---|---|---|
$gt | 大于 | { score: { $gt: 100 } } |
$gte | 大于等于 | { score: { $gte: 100 } } |
$lt | 小于 | { score: { $lt: 100 } } |
$lte | 小于等于 | { score: { $lte: 100 } } |
$ne | 不等于 | { score: { $ne: 100 } } |
$in | 在数组中 | { status: { $in: [1,2,3] } } |
$nin | 不在数组中 | { status: { $nin: [1,2,3] } } |