有没有一种方法可以用mongodb和$and运算符在嵌套数组中查找元素


Is there a way to find elements in nested arrays with mongodb and the $and operator?

我有一个文档:

"_id": ObjectId("THE DOCUMENT ID"),
   "GROUP NAME": "First Floor",
   "years": {
     "0": {
       "_id": "YEAR ID",
       "year_classes": {
         "0": {
           "class_name": "CLASS A",
           "_id": "CLASS ID",
           "participants": {
             "0": "PARTICIPANT ID" 
          } 
        },
         "1": {
           "class_name": "CLASS B",
           "_id": "CLASS ID",
           "participants": {
             "0": "PARTICIPANT ID" 
          } 
        },
      },
       "year_name": "YEAR 1" 
    },
     "1": {
       "_id": "YEAR ID",
       "year_classes": {
         "0": {
           "_id": "CLASS ID",
           "class_name": "CLASS C",
           "participants": [
          ] 
        } 
      },
       "year_name": "YEAR 2" 
    },
  } 

需要在一年中再增加一个班。代码通过$year_id变量(是一个字符串)具有年份id,类将添加到该变量中。

因此,它必须检查$NEW_class_name(字符串变量)给出的类名是否在当年已经使用过。

我看到了mongo的$and运算符,但我没能让它工作。如果它是一个SQL,它看起来像:WHERE year_id='$YEAR_ID'AND class_name='$NEW_CLASS_NAME'

如何在MongoDB中做到这一点?


更新:

查询:

{"years.year_classes.class_name":$NEW_class_name,"years_id":$YEAR_id}

正在搜索文档(因此它将始终返回TRUE)不是同一个数组。

有没有一种方法可以引导查询在同一个数组中找到这两个值,那么一个具有该名称的类,它在具有该特定ID的年份数组中的类数组中?

当比较嵌入对象内的两个条件时,需要使用$elemMatch。请参阅此处的一般说明。

您的查询结构类似于:

db.coll.find({"years":{$elemMatch:{"year_classes.class_name":$NEW_CLASS_NAME,"_id":$YEAR_ID }}})