MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Vòng lặp không xuất ra true hoặc false dựa trên truy vấn

Một vấn đề bạn gặp phải là vị trí mà bạn đang cố gắng ghi lại kết quả của isFriend. Nó hiện đang được ghi lại ngay sau khi bạn đặt isFriend thành false khi bạn vào vòng lặp tìm kiếm.

Câu lệnh đó cần được di chuyển ngay sau vòng lặp for bên trong.

Nếu không có tất cả các đầu vào, rất khó đoán được vấn đề có thể nằm ở đâu.

Sử dụng thông tin sau làm đầu vào (Bạn có thể cung cấp thông tin đầu vào thực tế ở định dạng JSON không?):

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

Tôi thấy các kết quả sau:

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

Khác với câu lệnh nhật ký được đặt sai chỗ (tôi không nghĩ rằng tôi đã thay đổi ngữ nghĩa của mã của bạn), với tập hợp đầu vào này, logic hoạt động. Có thể đầu vào mà bạn mong đợi không phải là những gì bạn đang nhận.

Hóa ra OP đang sử dụng trình điều khiển gốc mongoose cho nodejs và sau khi nghiên cứu đã tìm thấy câu trả lời cho phần so sánh của vấn đề ở đây: So sánh mongoose _id và các chuỗi



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lưu vào bộ đệm các kết nối MongoDB trong Django

  2. lưu trữ toàn bộ văn bản từ tệp txt vào mongodb

  3. Tìm kiếm và thay thế trong Mongodb?

  4. Mongoose:Không thể tìm nạp tài liệu tệp từ bộ sưu tập .chunk mà không có trường dữ liệu

  5. Lặp lại nối tiếp con trỏ mongodb (đợi lệnh gọi lại trước khi chuyển sang tài liệu tiếp theo)