Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MongoDB中查询数组中的嵌入文档_Mongodb_Mongodb Query - Fatal编程技术网

在MongoDB中查询数组中的嵌入文档

在MongoDB中查询数组中的嵌入文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我将此子文档嵌入到一个数组中: company:{ products:[ { vehicle: "Toyota", Model: "Camry" }, { vehicle: "Honda", Model: "Civic" }, { vehicle: "Honda", Model: "Accord" }, { vehicle: "Mercedes", Model: "vboot" }, ] } 如何选择仅匹配的车辆 {vehic

我将此子文档嵌入到一个数组中:

 company:{
    products:[
      { vehicle: "Toyota", Model: "Camry" },
      { vehicle: "Honda", Model: "Civic" },
      { vehicle: "Honda", Model: "Accord" },
      { vehicle: "Mercedes", Model: "vboot" },
    ]
 }
如何选择仅匹配的车辆

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

find关键字需要用于特定元素:

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

给出这样一份文件:

{
    "_id" : ....,
    "company" : [ 
        {
            "vehicle" : "Toyota",
            "Model" : "Camry"
        }, 
        {
            "vehicle" : "Honda",
            "Model" : "Civic"
        }, 
        {
            "vehicle" : "Honda",
            "Model" : "Accord"
        }, 
        {
            "vehicle" : "Mercedes",
            "Model" : "vboot"
        }
    ]
}
以下查询使用$elemMatch查询运算符仅查找具有车辆:'Honda'和车型:'Civic'的文档:

如果您只想返回公司数组中具有vehicle:“Honda”和Model:“Civic”的第一个元素,则应使用$elemMatch投影运算符:

从文档中:

这个 $elemMatch运算符将包含数组字段的文档与至少一个匹配所有指定查询条件的元素相匹配

这个 $elemMatch运算符将查询结果中字段的内容限制为仅包含与$elemMatch条件匹配的第一个元素


您需要使用$elemMatch,为什么车辆阵列没有钥匙?感谢Lyching的回复,但我使用$elemMatch,它选择了型号为“Civic”和“Accord”的两款车辆,而不是仅选择“Civic”,因为我想这听起来像是您实际上想在$project上使用$elemMatch。您能否用一个示例文档更新您的答案,该文档准确显示您希望查询返回的响应。否则,任何试图回答此问题的人都必须猜测您的要求。@yaxx我已更新了答案,以包含$elemMatch投影运算符的用法。由于对象嵌套在数组中,因此该运算符不起作用
{
    "_id" : ....,
    "company" : [ 
        {
            "vehicle" : "Toyota",
            "Model" : "Camry"
        }, 
        {
            "vehicle" : "Honda",
            "Model" : "Civic"
        }, 
        {
            "vehicle" : "Honda",
            "Model" : "Accord"
        }, 
        {
            "vehicle" : "Mercedes",
            "Model" : "vboot"
        }
    ]
}
db.collection.find(
    { company: { $elemMatch: { vehicle: 'Honda', Model: 'Civic' } } }
)
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"
        }
    ]
}