在Mongoose中仅返回父值匹配且子文档结果为true的文档

时间:2013-06-19 16:07:41

标签: node.js mongodb mongoose mongodb-query

在MongoDb中,我目前的文档类似于下面显示的文档。我有多个文件,如下图所示。例如,我想只撤回包含至少25%的十六进制值BA4D2A和75%的FFAB23的图像路径。

{
    "__v": 0,
    "_id": {
        "$oid": "51c1ac95f502f20969000022"
    },
    "hex": "BA4D2A",
    "img": [
        {
            "path": "http://example.com/image1.jpg",
            "perc": 10,
            "_id": {
                "$oid": "51c1ac95f502f20969000023"
            }
        },
        {
            "path": "http://example.com/image2.jpg",
            "perc": 20,
            "_id": {
                "$oid": "51c1ac95f502f20969000034"
            }
        }
    ]
}

在从上一个问题获得帮助之后,如果我正在寻找具有超过单个指定百分比量的所有十六进制值,我有以下查询对于拉回路径非常有效,但我意识到我想成为能够为每个十六进制值单独处理每个百分比。

如果你不能告诉我在玩Mongoose / MongoDb大约4天的时间,那么如果有更好的方法(建筑方面),我愿意接受各种想法。这种方法只是我通过阅读文档和谷歌而提出的。

clrModel.find({
            hex: {$in: [ "5B6D8B", "BA4D2A" ] } ,
            'img.perc': {$gte: 5}
            } ,
            'img.path', 
            function(error,data){
              //Handle my data res accordingly  
            });
};

编辑----------- 我已经设法通过下面的代码块获得了更接近我想要的东西,但我只想要满足所有条件的路径。下面的查询返回每个单独的十六进制查询的所有结果,但我想要只包含十六进制值及其百分比的图像的路径,如果这是有意义的。

clrModel.find({ 
            $or: [
                {hex: "5B6D8B", 'img.perc':{$gte: 5}}, 
                {hex: "BA4D2A", 'img.perc':{$gte: 12}}
                ],
        } , 
        'img.path', 
        function(error,data){   });

1 个答案:

答案 0 :(得分:1)

我认为问题是你构建条目的方式。每个文档只有一个十六进制字段,这意味着文档不可能包含这两个值。要查询您想要的内容,每个路径名都需要有一个关联的十六进制值和百分比数组,这样您就可以执行一个有效的$和查询。