内嵌文档查询包括两种情况


  • 查询整个内嵌文档,当内嵌文档键值对的数量以及键值对的顺序都相同时,才会匹配
  • 查询文档的某个字段,需要使用.号操作符



实例


var db = connect("localhost:27017/test"); 
    
    db.col.drop();
    
    var bulk = db.col.initializeUnorderedBulkOp();
    
     
    
    //测试数据
    
    var doc1= 
    
            {
    
               "name":"xiaoli",
    
               "age":20,
    
               "address":
    
               {
    
                  "province":"GuangDong",
    
                  "city":"ShenZhen"      
    
               }
    
            }
    
    bulk.insert(doc1);
    
     
    
    var doc2= 
    
            {
    
               "name":"xiaoqiang",
    
               "age":22,
    
               "address":
    
               {
    
                  "city":"ShenZhen",      
    
                  "province":"GuangDong"
    
                }
    
            }
    
     
    
    bulk.insert(doc2);
    
     
    
    //下面执行插入操作
    
    bulk.execute()
    
     
    
    print("========find--内嵌文档查询(查询整个子文档) ========")
    
    var cursor = db.col.find(
    
                        {  
    
                            "address":
    
                            { 
    
                                 "province":"GuDong"
    
                            }
    
                        });
    
    printjson( cursor.toArray() );
    
    

    
    var cursor = db.col.find(
    
                         {  
    
                             "address":
    
                             { 
    
                                 "province":"GuangDong",
    
                                 "city":"ShenZhen" 
    
                             }
    
                         });
    
    printjson( cursor.toArray() );
    
     
    
    print("========find--内嵌文档查询 (查询字段) ========")
    
    var cursor = db.col.find(
    
                          {  
    
                             "address.city":"ShenZhen"
    
                          })
    
    printjson(cursor.toArray());



运行结果:

C:\>mongo --quiet find_embedded.js
    
    ========find--内嵌文档查询(查询整个子文档) ========
    
    [ ]
    
    [
    
            {
    
                    "_id" : ObjectId("56e6a70060f9d7972921a204"),
    
                    "name" : "xiaoli",
    
                    "age" : 20,
    
                    "address" : {
    
                            "province" : "GuangDong",
    
                            "city" : "ShenZhen"
    
                    }
    
            }
    
    ]
    
    ========find--内嵌文档查询 (查询字段) ========
    
    [
    
            {
    
                    "_id" : ObjectId("56e6a70060f9d7972921a204"),
    
                    "name" : "xiaoli",
    
                    "age" : 20,
    
                    "address" : {
    
                            "province" : "GuangDong",
    
                            "city" : "ShenZhen"
    
                    }
    
            },
    
            {
    
                    "_id" : ObjectId("56e6a70060f9d7972921a205"),
    
                    "name" : "xiaoqiang",
    
                    "age" : 22,
    
                    "address" : {
    
                            "city" : "ShenZhen",
    
                            "province" : "GuangDong"
    
                    }
    
            }
    
    ]