2

mongoDBに問題があり、答えを探しましたが、問題を解決するものが見つかりませんでした。

db.coders.save( {
'name': 'John', 
'languages' : { 'php':'bad','java':'good','brainfuck':'very bad'} 
});

db.coders.save( {
'name': 'Sarah', 
'languages' : { 'php':'good','java':'bad','brainfuck':'very bad'} 
});

db.coders.save( {
'name': 'Tom', 
'languages' : { 'php':'very good','java':'good','brainfuck':'bad'} 
});

今、私はあらゆる言語を知っているコーダーを見つけたいと思っています。

4

2 に答える 2

5

不可能なので見つかりませんでした。指定したスキーマでは、どの検索演算子も機能しません。

最も簡単な回避策は、スキーマを少し変更することです。

db.coders.save( {
'name': 'John', 
'languages' : [ { n: 'php', v: 'bad'},{n:'java', v: 'good'},{n : 'brainfuck', v: 'very bad'}] 
});

このような場合、次のクエリを使用してデータをクエリできます。

db.coders.find({'languages.v' : 'good'})
于 2012-11-10T02:37:36.890 に答える
2

私は、スキーマを変更する方が良いというサルバドールに同意します。

しかし、$where演算子を使用して検索できることがわかりました。

db.coders.find({ $where : function() { for(lang in this.languages) { if (this.languages[lang] == 'very good') { return true; }  } return false;  }});

ドキュメントで指摘されているように、少し遅いかもしれません。

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

于 2012-11-10T06:18:40.413 に答える