mongoDB:通过嵌入值查找

时间:2012-11-10 01:56:32

标签: arrays mongodb

我有一些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'} 
});

现在我想找到任何知道任何语言'非常好'的编码员......怎么样?

2 个答案:

答案 0 :(得分:4)

你找不到它,因为这是不可能的。所有搜索运算符都不适用于您提供的架构。

最简单的解决方法是稍微更改架构:

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'})

答案 1 :(得分: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