2011-08-26 6 views
0
"user_crawls": { 
    "0": { 
     "_id": ObjectId("4e4b5e1c151c0d0336000093"), 
     "rand_id": "kPxMuXOY8Jfh6nXt", 
     "network": "tw", 
     "sourcenetwork": "874777", 
     "sourceName": "Krishna", 
    }, 
    "1": { 
     "_id": ObjectId("4e4b5e1c151c0d0336000094"), 
     "rand_id": "kPxMuXOY8Jfh6nXt", 
     "network": "fb", 
     "sourcenetwork": "145875", 
     "sourceName": "Krishna", 
    }, 
    "2": { 
     "_id": ObjectId("4e4b5e1c151c0d0336000095"), 
     "rand_id": "kPxMuXOY8Jfh6nXt", 
     "network": "fb", 
     "sourcenetwork": "145875", 
     "sourceName": "Ram", 
    } 

Je veux sélectionner les documents dont le réseau est fb et le nom de source est Krishna. A partir des données abouve normalement je voudrais obtenir le résultat le second doc dont l'id estMappeur Mongo (Mongo DB) document incorporé recherche de champs multiples

4e4b5e1c151c0d0336000094

Mais je reçois tous les dossiers

je le code suivant pour recueillir les données

DdNetworkCrawlLink.limit(10).all(:conditions => {'user_crawls.network' => "fb",'user_crawls.sourceName' => "Krishna") 

Merci pour votre temps

Sreeraj

Répondre

-1

Je pense que vous avez manqué ':' char. à la documentation sur mongomapper il dit

Patient.all(:last_name => 'Johnson', :order => :last_name.asc) 
+0

qui ne fera aucun problème, et ma question n'est pas que – Sreeraj

0

Lorsque vous interrogez à Mongo, vous ne pouvez demander des documents de racine. Donc, il est également dans MongoMapper.

Pour obtenir seulement les documents intégrés qui correspondent, vous devez interroger pour tous les documents de racine, puis tirer les documents intégrés d'eux:

DdNetworkCrawlLink 
.limit(10) 
.all('user_crawls.network' => "fb",'user_crawls.sourceName' => "Krishna") 
.map do |dbncl| 
    dcncl.user_crawls.select { |uc| uc.network == "fb" && uc.sourceName == "Krishna" } 
end.flatten 

Parce que le code ci-dessus est si alambiquée, il est recommande pour incorporer des documents uniquement lorsque les documents incorporés seront toujours utilisés/affichés/nécessaires en même temps que leurs parents.