0

在 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){   });
4

1 回答 1

1

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

于 2013-06-20T18:22:14.443 回答