MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Цикълът не извежда true или false въз основа на заявка

Един проблем, който имате, е местоположението, където се опитвате да регистрирате резултата от isFriend. В момента се регистрира точно след като сте задали isFriend на false, когато влезете в цикъла на търсене.

Този оператор трябва да бъде преместен точно след вътрешния for цикъл.

Без да разполагате с всички въведени данни, е много трудно да се отгатне къде може да е проблемът.

Използване на следното като вход (Можете ли да посочите какъв е действителният вход във формат 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);

Виждам следните резултати:

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

Освен че операторът на журнала е на грешното място (не мисля, че промених семантиката на вашия код), с този набор от входове логиката работи. Вероятно информацията, която сте очаквали, не е тази, която получавате.

Оказва се, че OP използва родния драйвер на mongoose за nodejs и след проучване намери отговора на сравнителната част от проблема тук:Сравняване на mongoose _id и низове



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:upsert, когато arrayFilters не може да намери съвпадение

  2. Указване на опции на курсора при връщане на поток в Spring Data MongoDB?

  3. Как да създадете MongoDB MultiKey индекс на атрибут на елементи в масив .NET драйвер

  4. Актуализирайте колекцията MongoDB с помощта на $toLower

  5. Mongodb -- включете или изключете определени елементи с c# драйвер