0

我有一个文件:

"_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 的年数组中的类数组中?

4

1 回答 1

0

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

您的查询结构将类似于:

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

于 2012-07-16T02:11:33.453 回答