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

    在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"
}

猜你喜欢

转载自kibear.iteye.com/blog/2344724