MongoDB查询集合中的对象数组

时间:2017-12-01 22:03:10

标签: javascript arrays json mongodb

我有一个集合,在这个集合中我有一个名为Degrees的对象数组,这个数组包含带有键的对象{Uni:'',Level:'',学位:'},我希望能够在参数对象中添加能够找到级别=' BS'例如,无论对象中的其他字段包含什么。到目前为止,我已尝试过:{$ elemMatch:{$ eq:{Uni:{$ exists:true,},Level:' BS',Degree:{$ exists:true}}}};但它没有用,有什么建议吗?

3 个答案:

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