【问题标题】:MongoDB query array of objects in collectionMongoDB查询集合中的对象数组
【发布时间】:2017-12-01 22:03:10
【问题描述】:

我有一个集合,在这个集合中我有一个名为 Degrees 的对象数组。

此数组包含带有键{Uni:'',Level:'',Degree:''} 的对象,我希望能够向参数对象添加查找具有level = 'BS' 度数的任何文档的能力,例如,无论对象中的其他字段是什么包含。

到目前为止我已经尝试过:

{
  $elemMatch: {
    $eq: {
      Uni: {
        $exists: true,
        
      },
      Level: "BS",
      Degree: {
        $exists: true
      }
    }
  }
}

但是没有成功,有什么建议吗?

【问题讨论】:

    标签: javascript arrays json mongodb


    【解决方案1】:

    $elemMatch 运算符匹配包含数组字段且至少有一个元素与所有指定查询条件匹配的文档。

    { <field>: { $elemMatch: { <query1>, <query2>, ... } } }
    

    我想这应该适合你:

    db.collection.find({Degrees: {$elemMatch: {level:'BS'}}})
    

    不要忘记用你的模型名称替换集合。 :)

    在此处查看 $elemMatch 文档:mongoDb $elemMatch

    【讨论】:

      【解决方案2】:

      可以直接查询嵌入数组中文档的字段。

      如果您的文档看起来像

      {
       _id:ObjectId("..."),
       Name: "",
       degrees: [
                 {Uni:"",
                  Level:"BS",
                  Degree:""}
                ]
       }
      

      您可以返回所有包含至少一个“BS”级别学位的文档

      db.collection.find({"degrees.Level":"BS"})
      

      【讨论】:

        【解决方案3】:

        如果我对您的理解正确,并假设您的收藏名为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' });
        

        【讨论】:

          猜你喜欢
          • 2014-03-03
          • 2020-07-27
          • 2018-04-13
          相关资源
          最近更新 更多