MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Pętla nie wyświetla prawdy lub fałszu na podstawie zapytania

Jednym z problemów, które masz, jest lokalizacja, w której próbujesz zarejestrować wynik isFriend. Jest aktualnie rejestrowany zaraz po ustawieniu isFriend na false podczas wchodzenia w pętlę wyszukiwania.

To stwierdzenie należy przenieść tuż za wewnętrzną pętlą for.

Bez posiadania wszystkich danych wejściowych bardzo trudno jest odgadnąć, gdzie może być problem.

Używanie następujących danych jako danych wejściowych (Czy możesz podać rzeczywiste dane wejściowe w formacie 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);

Widzę następujące wyniki:

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

Poza tym, że instrukcja log znajduje się w niewłaściwym miejscu (nie sądzę, że zmieniłem semantykę twojego kodu), przy tym zestawie danych wejściowych logika działa. Prawdopodobnie wkład, którego oczekiwałeś, nie jest tym, co otrzymujesz.

Okazuje się, że OP używał natywnego sterownika mongoose dla nodejs i po zbadaniu znalazł odpowiedź na część porównawczą problemu tutaj:Porównywanie _id i ciągów znaków mangusty



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 3 sposoby na wybranie wiersza z maksymalną wartością w SQL

  2. Dopasuj co najmniej N elementów tablicy do listy warunków

  3. mangusta - wybierz określone pola w Model.create

  4. Dlaczego mangusta findRandom() dla metody node.js nie działa?

  5. Najlepsze praktyki MongoDB dotyczące odwoływania się