Используя nodejs: mongodb найти, затем добавить в массив - PullRequest
0 голосов
/ 08 октября 2010

Я сделал простую базу данных с несколькими пользователями в ней с помощью mongodb и nodejs. Затем я перебираю список и отображаю пользователей в именах списка и т. Д. С помощью sys.puts ().

Нет. Я добавляю пользователей в массив () следующим образом:

db.open(function(err, db) {
    db.collection('users', function(err, collection) {
        collection.find({}, {'sort':[['name', 1]]}, function(err, cursor) {
            cursor.each(function(err, user) {
                if(user != null) {
                    users[user._id] = { 'name':user.name, 'email': user.email };
                    sys.puts(">> Adding user to list... "+ user.name);

                }
            });
            db.close();
        });
    });
});

Это как я добавляю пользователей в массив? Потому что users.lenght = 0. Я немного растерялся сейчас

1 Ответ

1 голос
/ 08 октября 2010

То, что вы делаете, это установка properties для объекта массива, что может немного сбить с толку.

[] используется для indexes и keys, что означает, что в случае вашего массива users[0] вернет первый элемент в массиве, но users['blaid12'] получит / установить свойство blaid12' on the array object, that's like doing users.blaid12`.

Итак, в конце ваш массив становится больше похож на хэш-карту. Свойство length не учитывает свойства объекта, оно подсчитывает элементы в массиве.

У вас есть несколько способов решения проблемы:

  1. Используйте объект {} и используйте идентификаторы пользователя в качестве ключей для этого объекта, вам придется отслеживать количество пользователей с помощью другой переменной.

  2. Используйте массив как массив, используя users.push({'name':...}) для добавления элементов в массив. Если вам также нужен userid , просто добавьте его к объекту, который вы вставляете в массив.

  3. Используйте смешанный подход, используйте массив для передачи значений, а затем объект для сопоставления идентификаторов с индексами массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...