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 回答