sql >> Database teknologi >  >> NoSQL >> MongoDB

Loop udsender ikke sand eller falsk baseret på forespørgsel

Et problem, du har, er det sted, hvor du forsøger at logge resultatet af isFriend. Det bliver i øjeblikket logget lige efter du har indstillet isFriend til falsk, når du går ind i søgeløkken.

Den erklæring skal flyttes lige efter den indre for-løkke.

Uden at have alle input, gør det det meget svært at gætte, hvor problemet kan være.

Brug af følgende som input (Kan du angive, hvad det faktiske input er i JSON-format?):

var users = [
    {
        lastName: 'Smith',
        '_id': "51ee2017c2023cc816000001"
    },
    {
        lastName: 'Jones',
        '_id': "51ee2017c2023cc816000002"
    },
    {
        lastName: 'Macks',
        '_id': "51ee2017c2023cc816000003"
    }
];

var signedInUser = {
    friendRequest: [{
        "friendId": "51ee2017c2023cc816000002",
        "read": 0,
        "date_requested": "2013-07-23T06:29:39.021Z"
    }, {
        "friendId": "51ee203cc2023cc816000003",
        "read": 0,
        "date_requested": "2013-07-23T06:42:37.872Z"
    }]
};

function test(err, signedInUser) {
    console.log("\nsignedInUser.friendRequest\n" + JSON.stringify(signedInUser.friendRequest, null, 2));
    for (var x = 0; x < users.length; x++) {
        users[x].isFriend = false;
        console.log("\n" + users[x].lastName);
        for (var i = 0; i < signedInUser.friendRequest.length; i++) {
            console.log(users[x]._id + ' - ' + signedInUser.friendRequest[i].friendId);
            if (users[x]._id === signedInUser.friendRequest[i].friendId) {
                users[x].isFriend = true;
                console.log('test');
                break;
            }
        }
        console.log(users[x].isFriend);
    }

    console.log("\nFinal users:\n" + JSON.stringify(users, null, 2));
}

test(null, signedInUser);

Jeg ser følgende resultater:

signedInUser.friendRequest
[
  {
    "friendId": "51ee2017c2023cc816000002",
    "read": 0,
    "date_requested": "2013-07-23T06:29:39.021Z"
  },
  {
    "friendId": "51ee203cc2023cc816000003",
    "read": 0,
    "date_requested": "2013-07-23T06:42:37.872Z"
  }
]

Smith
51ee2017c2023cc816000001 - 51ee2017c2023cc816000002
51ee2017c2023cc816000001 - 51ee203cc2023cc816000003
false

Jones
51ee2017c2023cc816000002 - 51ee2017c2023cc816000002
test
true

Macks
51ee2017c2023cc816000003 - 51ee2017c2023cc816000002
51ee2017c2023cc816000003 - 51ee203cc2023cc816000003
false

Final users:
[
  {
    "lastName": "Smith",
    "_id": "51ee2017c2023cc816000001",
    "isFriend": false
  },
  {
    "lastName": "Jones",
    "_id": "51ee2017c2023cc816000002",
    "isFriend": true
  },
  {
    "lastName": "Macks",
    "_id": "51ee2017c2023cc816000003",
    "isFriend": false
  }
]

Bortset fra at log-sætningen er det forkerte sted (jeg tror ikke, jeg har ændret semantikken i din kode), fungerer logikken med dette sæt af input. Det er sandsynligt, at det input, du forventede, ikke er det, du modtager.

Det viser sig, at OP brugte den oprindelige mongoose-driver til nodejs, og efter at have undersøgt fandt svaret på sammenligningsdelen af ​​problemet her:Sammenligning af mongoose _id og strenge



  1. Postmand socket hang up kunne ikke oprette forbindelse til Mongodb

  2. Redis Cluster vs ZeroMQ i Pub/Sub, til horisontalt skalerede distribuerede systemer

  3. MongoDb:Hvordan importerer man dumpdata fra .gz-filen?

  4. MongoDB $toDate