MongoDB
 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 = 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Как да получите точност на N десетични знаци в заявка

  2. Агрегирани документи, където обектите в масива отговарят на множество условия

  3. Как да видя заявките, изпълнявани от моя mongodb?

  4. MongoDB:проверете връзката с DB

  5. MongoDB:Актуализирайте поле на елемент в масив със съвпадение на друго поле на този елемент