-1


0

nodejsを使用して:mongodb findしてからArrayに追加する

mongodbとnodejsを使用して、少数のユーザーを含む単純なdbを作成しました。 次に、リストをループし、sys.puts()を使用してリストの名前などにユーザーを表示します。

いいえ、次のようにユーザーをArray()に追加しています。

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 Answer


1


あなたがしているのは、配列オブジェクトに「プロパティ」を設定することです。これは少し混乱するかもしれません。

[]`は `indexes`と keys`の両方に使用されます。つまり、配列の場合、 `users [0]`は配列の最初の要素を返しますが、 `users ['blaid12']`を返します。配列オブジェクトのプロパティ「blaid12」を取得/設定します。これは、「users.blaid12」を実行するようなものです。

最終的に、配列はハッシュマップのようになります。 `length`プロパティはオブジェクトのプロパティをカウントせず、配列内の要素をカウントします。

問題を解決するには、いくつかの方法があります。

  1. オブジェクト `{}`を使用し、ユーザーIDをそのオブジェクトのキーとして使用すると、 別の変数を介してユーザーカウントを追跡する必要があります。

  2. `users.push({'name':…​})`を使用して配列として配列を使用します

    • userid *も必要な場合は、配列に要素を追加し、配列にプッシュするオブジェクトに追加します。

  3. 混合アプローチを採用し、配列を使用して値をプッシュしてから、 IDを配列インデックスにマップするオブジェクト。