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

Mongodb find ne fonctionne pas avec l'Objectid

Vos identifiants de page Web sont des chaînes tandis que les _ids avec lesquels vous recherchez sont des ObjectIds. Votre recherche ne correspond à aucun résultat car il n'y a aucun document dans le tableau des résultats qui ait des valeurs ObjectId pour l'élément "webpageid".

Il y a deux solutions à mon avis.

  1. Vous pouvez stocker des ObjectIds au lieu de chaînes pour le webpageid élément dans les results le recueil. La mise en œuvre de ceci est bien sûr basée sur la façon dont ces documents entrent dans la collection.
  2. Vous pouvez créer une variable de chaîne à partir de l'ObjectId dans la boucle pour comparer à la place. Par exemple,

    ...
    for(var i = 0; i < docs.length; i++) {
        var docId = docs[i]._id.toString(); // create a string
        db.get('results').findOne({'webpageid':docId}, function(err, doc)
        ...
    

Si vous optez pour la deuxième option, vous devrez peut-être examiner pourquoi il y a une citation principale au début de l'webpageid valeur pour le deuxième document dans les results collecte.

"webpageid" : "\"54960a916ecb16dc3c4880e8"

Enfin, je ne sais pas grand-chose de vos besoins, mais vous voudrez peut-être repenser MongoDB en tant que solution. Il semble que vous créez quelque chose comme un JOIN, ce que MongoDB n'est pas conçu pour gérer très bien.