2017-09-19 1 views
0

私のmongo文書は、私が何かを「eventCat.1」または「eventCat.2」などの有無をチェックし、更新したい モンゴは

{ 
    "_id": ObjectId("59b0ee362976fb61fc54708d"), 
    "id_str": "29979814", 
    "eventCat": { 
    "1": [2], 
    "2": [10, 5, 2, 2, 10], 
    "7": [10], 
    "8": [10, 5] 
    } 
} 

下回るようになり、数値名前で埋め込みフィールドを参照してください。しかし、私の問題は、機能していない関数からフィールドを参照するときです。

db.testCorpus.find({"id_str" : "29979814"}).forEach(function (x) { 
    tmp=x.eventCat.1; 
    if(tmp != null) { 
    print(x.eventCat.1); 
    } 
}) 
2017-09-20T00:08:53.115+0530 E QUERY [thread1] SyntaxError: missing ; before statement @(shell):1:98 

引用符を使用すると、文字列リテラルが印刷されます。私は$を使って引用符を使ってみましたが、役に立たなかった。

db.testCorpus.find({"id_str" : "29979814"}).forEach(function (x) { 
    tmp='$x.eventCat.1'; 
    if(tmp != null) { 
    print(tmp); 
    } 
}) 
> $x.eventCat.1 

私は、これは数値フィールド名が原因だと思います。なぜなら、他の埋め込みフィールドでは、私は望ましい出力を得るからです。これを解決する方法はありますか?ありがとうございました。

答えて

0

あなたはこれを試してみてください:

db.testCorpus.find({"id_str" : "29979814"}).forEach(function (x) { 
    tmp=x.eventCat['1']; 
    if(tmp != null) { 
    print(x.eventCat['1']); 
    } 
}) 

> 2 
+0

埋め込みフィールドが連想配列のように振る舞いますか?チャームのように働いた!ありがとう@Julien。 – Rajesh

+0

javascriptオブジェクト(ここでは埋め込みフィールド)は連想配列です。そしてmongodbはjavascriptのfortスクリプトを使います。したがって、埋め込みフィールドは連想配列のように動作します。 'foo.bar'は' foo ['bar'] 'と同じです –