sql >> Databáze >  >> NoSQL >> MongoDB

Loop nevydává na základě dotazu hodnotu true nebo false

Jeden problém, který máte, je umístění, kam se pokoušíte zaznamenat výsledek isFriend. Aktuálně se zaznamenává hned poté, co nastavíte parametr isFriend na hodnotu false, když vstoupíte do vyhledávací smyčky.

Tento příkaz je třeba přesunout těsně za vnitřní smyčku for.

Bez všech vstupů je velmi obtížné odhadnout, kde by mohl být problém.

Jako vstup použijte následující (Můžete uvést, jaký je skutečný vstup ve formátu JSON?):

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

Vidím následující výsledky:

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
  }
]

Kromě toho, že je příkaz log na špatném místě (nemyslím si, že jsem změnil sémantiku vašeho kódu), s touto sadou vstupů logika funguje. Je pravděpodobné, že vstup, který jste očekávali, není to, co dostáváte.

Ukázalo se, že OP používal nativní ovladač mongoose pro nodejs a po prozkoumání našel odpověď na srovnávací část problému zde:Porovnání _id a řetězců mongoose



  1. MongoDB GridFS - Je to název souboru nebo název souboru

  2. Jak hledat dokument podle oid v mongoengine

  3. Mongoose - nemůžete získat přístup k vlastnostem objektu?

  4. MongoDB s C# - dotaz s dynamicky generovaným predikátem