MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment rechercher des données séparées par des virgules dans mongodb

Je dirais utiliser Map-Reduce pour créer une collection séparée qui stocke le genre sous forme de tableau avec des valeurs provenant de la chaîne séparée par des virgules, que vous pouvez ensuite exécuter le travail Map-Reduce et administrer les requêtes sur la collection de sortie.

Par exemple, j'ai créé des exemples de documents pour le foo collecte :

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

L'opération map/reduce suivante produira alors la collection à partir de laquelle vous pourrez appliquer des requêtes performantes :

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"
});

L'interrogation serait simple, tirant parti des requêtes avec un index multi-clé sur la value champ :

db.foo_result.createIndex({"value": 1});

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

Sortie :

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

/* 1 */
{
    "_id" : ObjectId("55842af93cab061ff5c618d0"),
    "value" : [ 
        "Comedy", 
        "Action"
    ]
}