sql >> データベース >  >> NoSQL >> MongoDB

MongoDB-他を除く正確な配列要素をフェッチする

    これは、MongoDBでの標準的で理解しやすい配列の誤解です。クエリ条件により、ドキュメントを対象とした適切な結果が得られます。 、必ずしもだけではありません 探している配列内のアイテム。つまり、DATA NOT FOUNDを見つけるという希望の目標が与えられた場合 、ほとんどの単純なクエリは、配列内の少なくとも1つのアイテムが一致するドキュメントを検索しますが、一致しないドキュメントは除外しません。これをワンショットで行うには、もう少し複雑にする必要があります:

    db.foo.aggregate([
    // Make sure at *least* one label has a remark of DATA NOT FOUND;
    // otherwise, the $filter trick in the next stage yields a labels array
    // of length 0 (which is not horrible).  Also, this is a good place to
    // add other $match criteria, possibly index-optimized, to shrink down the
    // size of response set:
    {$match: {"divisionIn.sections.labels.remarks":"DATA NOT FOUND"}}
    
    ,{$project: {
            // Copy over the main doc level things we want:
            projectDR: "$projectDR",
            code: "$code",
            status: "$status"
    
            // divisionIn is a map, not an array, so we can dive down using dot notation
            // and make a new sections array called divSections that will ONLY have
            // DATA NOT FOUND: 
            divSections: {$map: {input: "$divisionIn.sections", as:"z", in:
                {
                    // Again, copy over things we want to keep; may not need all of them
                    "sectionNumber": "$$z.sectionNumber",
                    "sectionName": "$$z.sectionName",
    
                    // The Juice: Copy BUT FILTER the labels field conditionally based on
                    // the value of labels.remarks:
                    "labels": {$filter: {input: "$$z.labels",
                                 as: "z2",
                                 cond: {$eq: [ "$$z2.remarks", "DATA NOT FOUND"] }
                        }}
                }
                }}
        }}
    
                           ]);
    



    1. 遅延レプリカによるMongoDBバランサーのタイムアウト

    2. インデックスが設定されているにもかかわらず、単純なMongoDBクエリが非常に遅い

    3. トップMongoDBリソース

    4. MongoDBを使用してHerokuで独自のParseServerをホストするにはどうすればよいですか?