0

MongoDb には現在、以下に示すようなドキュメントがあります。以下のような書類が複数あります。たとえば、少なくとも 16 進値 BA4D2A の 25% と FFAB23 の 75% を含むイメージ パスのみをプルバックしたいと考えています。

{
    "__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"
            }
        }
    ]
}

以前の質問から親切に助けを得た後、特定のパーセンテージ量を超えるすべての16進値を探していた場合、パスを引き戻すのに非常に役立つ以下のクエリがありますが、処理できるようにしたいことに気付きました各 16 進値ごとに個別のパーセンテージ。

私が Mongoose/MongoDb を使い始めてまだ 4 日ほど経っていないので、これを行うためのより良い方法 (アーキテクチャに関して) があれば、私はアイデアを受け入れます。このアプローチは、ドキュメントとグーグルを読んで思いついたものです。

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

EDIT ----------- 以下のコード ブロックを使用して、必要なものに少し近づけることができましたが、すべての基準を満たすパスのみが必要です。以下のクエリは、個々の 16 進クエリごとにすべての結果を返しますが、意味がある場合は、16 進値とそのパーセンテージの両方を含む画像のみのパスが必要です。

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

1 に答える 1

1

問題は、エントリを構成する方法だと思います。ドキュメントごとに 1 つの 16 進数フィールドしかないため、ドキュメントに両方の値を含めることはできません。必要なものをクエリするには、各パス名に 16 進数値とパーセンテージの配列が関連付けられている必要があるため、機能する $and クエリを実行できます。

于 2013-06-20T18:22:14.443 に答える