sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb find fungerar inte med Objectid

Dina webbsidor är strängar medan _id:erna som du söker med är ObjectIds. Ditt fynd matchar inga resultat eftersom det inte finns några dokument i resultattabellen som har ObjectId-värden för elementet "webpageid".

Det finns två lösningar som jag ser det.

  1. Du kan lagra ObjectIds istället för strängar för webpageid element i results samling. Implementeringen av detta är naturligtvis baserat på hur dessa dokument kommer in i samlingen.
  2. Du kan skapa en strängvariabel från det returnerade ObjectId inom loopen för att jämföra istället. Till exempel,

    ...
    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)
        ...
    

Om du väljer det andra alternativet kan du behöva undersöka varför det finns ett ledande citat i början av webpageid värde för det andra dokumentet i results samling.

"webpageid" : "\"54960a916ecb16dc3c4880e8"

Slutligen vet jag inte mycket om dina krav, men du kanske vill tänka om MongoDB som en lösning. Det verkar som att du skapar något som en JOIN vilket är något som MongoDB inte är designat för att hantera särskilt bra.




  1. Hur man lagrar stora antal i MongoDB med Node.js

  2. Aggregerad mongo-data php

  3. Tappa Mongo-samlingen rensar inte diskutrymme

  4. MongoDB updateOne()