mongodb用子文档做为查询条件的两种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
  "_id": ObjectId("52fc6617e97feebe05000000"),
  "age": 28,
  "level": NumberInt(500),
  "name": "name5",
  "person": [
    {
      "level": 5,
      "score": 100,
    "ccc":{"ccc3":56,"fff3":78}
    },
    {
      "level": 7,
      "score": 90,
      "like": "music"
    }
  ],
  "score": NumberInt(500),
  "sex": "男"
}

  方法一:

1
2
3
db.testColl.find({"person.level":7});
 
db.testColl.find({"person.ccc.ccc3":56});

  

均可查出结果,就是说这种方法可以嵌套使用!

方法二、使用$elemMatch操作符

1
db.testColl.find({"person":{"$elemMatch":{"level":5}}});

  

可以查出结果

1
db.testColl.find({"person":{"$elemMatch":{"ccc":{"$elemMatch":{"ccc3":56}}}}});

  

无法查出结果

1
2
3
db.testColl.find({"person":{"$elemMatch":{"ccc":{"ccc3":56,"fff3":78}}}});
 
db.testColl.find({"person":{"$elemMatch":{"ccc.ccc3":56}}});

  

可以查出结果
也就是说第二种方法不能嵌套使用。 

posted @   孤独青鸟  阅读(9593)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2015-05-25 Spring MVC和Struts2的比较(二)
2015-05-25 Spring MVC和Struts2的比较的优点
2015-05-25 常见MVC框架比较
点击右上角即可分享
微信分享提示