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

mongodbでコンマ区切りのデータを検索する方法

    Map-Reduce を使用すると思います genreを保存する別のコレクションを作成します 分割されたコンマ区切りの文字列からの値を含む配列として、Map-Reduceジョブを実行し、出力コレクションでクエリを管理できます。

    たとえば、fooのサンプルドキュメントをいくつか作成しました。 コレクション:

    db.foo.insert([
        {genre: 'Action, Adventure, Sci-Fi'},
        {genre: 'Thriller, Romantic'},
        {genre: 'Comedy, Action'}
    ])
    

    次のmap/reduce操作により、パフォーマンスクエリを適用できるコレクションが生成されます。

    map = function() {
        var array = this.genre.split(/\s*,\s*/);
        emit(this._id, array);
    }
    
    reduce = function(key, values) {
        return values;
    }
    
    result = db.runCommand({
        "mapreduce" : "foo", 
        "map" : map,
        "reduce" : reduce,
        "out" : "foo_result"
    });
    

    valueのマルチキーインデックスを使用してクエリを活用することで、クエリは簡単になります。 フィールド:

    db.foo_result.createIndex({"value": 1});
    
    var genre = ['Action', 'Adventure'];
    db.foo_result.find({'value': {'$in': genre}})
    

    出力

    /* 0 */
    {
        "_id" : ObjectId("55842af93cab061ff5c618ce"),
        "value" : [ 
            "Action", 
            "Adventure", 
            "Sci-Fi"
        ]
    }
    
    /* 1 */
    {
        "_id" : ObjectId("55842af93cab061ff5c618d0"),
        "value" : [ 
            "Comedy", 
            "Action"
        ]
    }
    



    1. Max Attempts Exceeded Exception queuelaravel

    2. $andをMongoDBで使用する複数の$regex

    3. 既存のすべてのフィールドを含め、ドキュメントに新しいフィールドを追加します

    4. NOTとANDを一緒に使用するMongoDB