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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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$elemMatch显示问题_Mongodb_Bson - Fatal编程技术网

MongoDB$elemMatch显示问题

MongoDB$elemMatch显示问题,mongodb,bson,Mongodb,Bson,以下是测试集合中的示例文档 我的要求是只提取*两个字段 “host.name”和“host.config.storageDevice.scsiLun.lunType”匹配“host.config.storageDevice.scsiLun.lunType”:“cdrom1”和“host.name”:“on xxx” 就像我上面提到的,我只希望属性“lunType”显示在数组中,而不是“a”或“b” 我试图同时使用$elemMatch和$projection,但它似乎总是返回数组“lunType”

以下是测试集合中的示例文档

我的要求是只提取*两个字段 “host.name”和“host.config.storageDevice.scsiLun.lunType”匹配“host.config.storageDevice.scsiLun.lunType”:“cdrom1”和“host.name”:“on xxx”

就像我上面提到的,我只希望属性“lunType”显示在数组中,而不是“a”或“b”

我试图同时使用$elemMatch和$projection,但它似乎总是返回数组“lunType”的所有属性……我在这里遗漏了什么吗

试图参考文献

查询 db.test.find({“host.config.storageDevice.scsiLun”:{$elemMatch:{“lunType”:“cdrom1”}}},{“host.name”:1,“host.config.storageDevice.scsiLun.$”:1})

db.test.find({“host.config.storageDevice.scsiLun.lunType”:“cdrom1”},{“host.name”:1,“host.config.storageDevice.scsiLun.$”:1})

收藏中的文件
$elemMatch所做的只是返回数组中与条件匹配的第一个元素,但它将为您提供整个元素,即“a”和“lunType”属性

使用分解数组,然后过滤并仅显示“lunType”字段,可能会得到所需的结果

我没有测试查询,但它应该是这样的:

    db.test.aggregate(
        { $unwind : "$host.config.storageDevice.scsiLun" },
        { $match : { host.name : "on-xxx" , 
             host.config.storageDevice.scsiLun.lunType : "cdrom1" } },
        { $project : {
            _id : 0 ,
            host.config.storageDevice.scsiLun.lunType : 1 }
    );

已尝试查询,但无法使其正常工作-db.test.aggregate({$unwind:$host.config.storageDevice.scsiLun},{$match:{{{{“host.name”:“on xxx”},{“host.config.storageDevice.scsiLun.lunType”:“cdrom1”},{$project:{{u id:0,”host.config.storageDevice.scsiLun.lunType:“1}”);这适用于db.test.aggregate({$unwind:$host.config.storageDevice.scsiLun“},{$match:{”host.name:“on xxx”,“host.config.storageDevice.scsiLun.lunType:“disk2”},{$project:{id:{0,“host.name”:1,“host.config.storageDevice scsiLun.lunType:”1})感谢您对语法的更正,我编辑了我的答案以匹配您的语法。
    db.test.aggregate(
        { $unwind : "$host.config.storageDevice.scsiLun" },
        { $match : { host.name : "on-xxx" , 
             host.config.storageDevice.scsiLun.lunType : "cdrom1" } },
        { $project : {
            _id : 0 ,
            host.config.storageDevice.scsiLun.lunType : 1 }
    );