sql >> データベース >  >> NoSQL >> MongoDB

ループはクエリに基づいてtrueまたはfalseを出力していません

    問題の1つは、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はnodejsにマングースネイティブドライバーを使用していたことが判明しました。調査の結果、ここで問題の比較部分に対する答えが見つかりました:mongoose_idとstringsの比較



    1. Spring ReactiveMongoRepositoryにMonoのsaveメソッドがないのはなぜですか?

    2. 正確なサブドキュメントレベルの条件なしで複数のサブドキュメントを更新する

    3. MongoDB C#-存在しない要素のBsonDocumentを取得する

    4. 投稿と共有のためのMongodbスキーマ