簡體   English   中英

在MongoDB中查詢數組中的嵌入式文檔

[英]Querying an embedded document in an array in MongoDB

我將此子文檔嵌入到數組中:

 company:{
    products:[
      { vehicle: "Toyota", Model: "Camry" },
      { vehicle: "Honda", Model: "Civic" },
      { vehicle: "Honda", Model: "Accord" },
      { vehicle: "Mercedes", Model: "vboot" },
    ]
 }

如何選擇僅匹配的車輛

{vehicle:'Honda', Model:'Civic'}

從而:

company:{
    products:[         
      { vehicle: "Honda", Model: "Civic" },
    ]
 }

給定這樣的文檔:

{
    "_id" : ....,
    "company" : [ 
        {
            "vehicle" : "Toyota",
            "Model" : "Camry"
        }, 
        {
            "vehicle" : "Honda",
            "Model" : "Civic"
        }, 
        {
            "vehicle" : "Honda",
            "Model" : "Accord"
        }, 
        {
            "vehicle" : "Mercedes",
            "Model" : "vboot"
        }
    ]
}

以下查詢使用$elemMatch 查詢運算符僅查找具有vehicle:'Honda' and Model:'Civic'那些文檔:

db.collection.find(
    { company: { $elemMatch: { vehicle: 'Honda', Model: 'Civic' } } }
)

如果您只想返回公司數組中具有vehicle:'Honda' and Model:'Civic'的第一個元素vehicle:'Honda' and Model:'Civic' ,則應使用$elemMatch 投影運算符

db.collection.find(
    // only find documents which have a company entry having vehicle=Honda and model=Civic
    { company: { $elemMatch: { vehicle: 'Honda', Model: 'Civic' } } }, 

    // for the documents found by the previous clause, only return the first element
    // in the company array which has vehicle=Honda and model=Civic
    { company: { $elemMatch: { vehicle: 'Honda', Model: 'Civic' } } }
)

// returns:

{
    "_id" : ObjectId("5a79613f85c9cec3a82c902c"),
    "company" : [ 
        {
            "vehicle" : "Honda",
            "Model" : "Civic"
        }
    ]
}

從文檔:

$elemMatch運算符匹配包含一個數組字段的文檔,該數組字段的至少一個元素與所有指定的查詢條件匹配。

$elemMatch運算符將查詢結果中<array>字段的內容限制為僅包含與$elemMatch條件匹配的第一個元素。

find()關鍵字需要用於特定元素:

db.company.find({vehicle:"Honda",Model:"Civic"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM