我有一个集合,在这个集合中我有一个名为Degrees的对象数组,这个数组包含带有键的对象{Uni:'',Level:'',学位:'},我希望能够在参数对象中添加能够找到级别=' BS'例如,无论对象中的其他字段包含什么。到目前为止,我已尝试过:{$ elemMatch:{$ eq:{Uni:{$ exists:true,},Level:' BS',Degree:{$ exists:true}}}};但它没有用,有什么建议吗?
答案 0 :(得分:1)
您可以直接查询嵌入数组中文档的字段。
如果您的文档看起来像
{
_id:ObjectId("..."),
Name: "",
degrees: [
{Uni:"",
Level:"BS",
Degree:""}
]
}
您可以使用
返回包含至少一个“BS”级别学位的所有文档db.collection.find({"degrees.Level":"BS"})
答案 1 :(得分:0)
如果我正确理解您,并假设您的收藏集被称为degrees
,则应该如此简单:
// From the mongo shell:
db.degrees.find({ Level: 'BS' });
// From javascript (assuming node's native driver):
db.collection('degrees').find({ Level: 'BS' });
如果您只对第一个结果感兴趣,那么您可以使用以下内容:
// From the mongo shell:
db.degrees.findOne({ Level: 'BS' });
// From javascript:
db.collection('degrees').findOne({ Level: 'BS' });
答案 2 :(得分:0)
$ elemMatch 运算符匹配包含数组字段的文档,其中至少有一个元素符合所有指定的查询条件。
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
我想这应该适合你:
db.collection.find({Degrees: {$elemMatch: {level:'BS'}}})
不要忘记用你的模型名称替换集合。 :)
在这里结帐$ elemMatch documetation:mongoDb $elemMatch