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

MeteorのMongoからクエリされたオブジェクトの属性にどのようにアクセスしますか

    find メソッドは、オブジェクトや配列ではなく、カーソルを返します。オブジェクトにアクセスするには、カーソルからオブジェクトをフェッチする必要があります

    var skill = Skills.find(Session.get('selected_skill')).fetch()[0];
    

    または、findOneで直接入手してください :

    var skill = Skills.findOne(Session.get('selected_skill'));
    

    次に、他のjsオブジェクトと同じように使用できます:

    console.log(skill.mana);
    skill._cache = {cooldown: true};
    

    クライアント側では、findなどの収集メソッドがあることに注意してください。 ノンブロッキングです。 Meteorがキャッシュに持っているものは何でも返しますが、必ずしもサーバー側のデータベースにあるものではありません。そのため、常にリアクティブコンテキストで使用するか、実行前にすべてのデータがフェッチされていることを確認する必要があります(Meteorに精通するまでは、最初の方法から始めてください)。

    また、このため、findOne およびfind.fetch nullを返す場合があります /対応する要素がdbにある場合でも、空の配列(ただし、まだキャッシュされていません)。リアクティブ関数でそれを考慮しないと、エラーが発生します。

    Template.article.slug = function() {
        var article = Articles.findOne(current_article);
        if(!article) return '';
        return slugify(article.title);
    };
    

    if(!article)を使用して関数からエスケープしなかった場合 、式article.title articleのように、最初の計算でエラーが発生します 未定義になります(以前にキャッシュされていなかったと仮定します)。

    クライアント側からデータベースを更新する場合は、一度に1つのアイテムしか変更できず、そのアイテムを_idで参照する必要があります。 。これはセキュリティ上の理由によるものです。これに対するあなたのラインは大丈夫でした:

    Skills.update(Session.get('selected_skill'), {$inc: {mana: 1}});
    

    alert() 戻る関数です 何を与えても未定義です。

    alert(42); // -> undefined
    

    一般的に、それは遠い console.logでデバッグする方が良い alertよりも 。




    1. MongoDb合計クエリ

    2. mongodbで動的ドキュメントキーを作成する方法

    3. MongoDB $ max

    4. 集約フレームワークの対象インデックスの作成