欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mongodb基础知识-内嵌文档相关  

程序员文章站 2022-03-20 18:01:55
...

    在mongodb中字段的值,可以是基本数据类型,也可是是文档类型。这样的话,如果要在内嵌文档中查询,可能需要对内嵌文档的字段建立索引。下面列出一些内嵌文档上的常用操作。

    1. 内嵌文档单个字段建立索引

// 假设单个文档结构如下
{
  "_id": ObjectId("570c04a4ad233577f97dc459"),
  "score": 1034,
  "location": { state: "NY", city: "New York" }
}
// 对location的state字段建立索引
db.records.createIndex( { "location.state": 1 } )
// 这两个查询都可以用到state的索引
db.records.find( { "location.state": "CA" } )
db.records.find( { "location.city": "Albany", "location.state": "NY" } )

    2.  内嵌文档精确匹配查询  基本的语法就是:fieldName: {field1: <value>,...},这种查询的返回的结果满足:内嵌文档只包含查询的字段、内嵌文档字段相应的值完全匹配、内嵌文档字段的顺序和查询中字段的顺序一致。

// 查询语句 
db.bios.find( { name: { first: "Yukihiro", last: "Matsumoto" } } )


// 下面这两种不会被匹配到  一种是字段个数不一致 一种是字段顺序不一致
{
   first: "Yukihiro",
   aka: "Matz",
   last: "Matsumoto"
}

{
   last: "Matsumoto",
   first: "Yukihiro"
}

    3. 内嵌文档部分字段查询  上面的精确匹配太过严格,这样就要用到部分字段查询, 也就是只要查询的字段和值都匹配就返回,不管查询字段的顺序和内嵌文档的字段个数。

// 内嵌文档部分字段查询
db.bios.find( { "name.first": "Yukihiro", "name.last": "Matsumoto" } )

// 下面这两种结构也可以被查询出来
{
  first: "Yukihiro",
  aka: "Matz",
  last: "Matsumoto"
}

{
  last: "Matsumoto",
  first: "Yukihiro"
}