簡體   English   中英

mongodb 在數組中查找字段

[英]mongodb find fields inside an array

我正在嘗試學習 mongodb,我的數據庫如下所示:

    {
        "_id" : ObjectId("625c95836be34e3c73c37316"),
        "cuisine" : "Chinese",
        "grades" : [
            {
                "date" : ISODate("2014-02-25T00:00:00Z"),
                "grade" : "A",
                "score" : 112
            },
            {
                "date" : ISODate("2013-08-14T00:00:00Z"),
                "grade" : "C",
                "score" : 28
            },
            {
                "date" : ISODate("2012-07-18T00:00:00Z"),
                "grade" : "A",
                "score" : 13
            },
            {
                "date" : ISODate("2012-03-09T00:00:00Z"),
                "grade" : "A",
                "score" : 13
            },
            {
                "date" : ISODate("2011-10-27T00:00:00Z"),
                "grade" : "A",
                "score" : 12
            },
            {
                "date" : ISODate("2011-05-19T00:00:00Z"),
                "grade" : "A",
                "score" : 13
            }
        ],
        "name" : "janette"
    },
    {
        "_id" : ObjectId("625c95836be34e3c73c37317"),
        "cuisine" : "Chinese",
        "grades" : [
            {
                "date" : ISODate("2014-01-07T00:00:00Z"),
                "grade" : "A",
                "score" : 17
            },
            {
                "date" : ISODate("2013-05-09T00:00:00Z"),
                "grade" : "B",
                "score" : 107
            }
        ],
        "name" : "Annie'S Kitchen"
    }

每個 object 都有一個擁有相同字段的數組。 如果我嘗試:

db.restaurants.find({"grades.score":{ $gt: 80, $lt: 100 }});

它會捕獲兩者,但應該捕獲一個。 我也希望能夠檢查:

db.restaurants.find("grades.score":{$gt: 70},"grades.grade":{/^A$/} });

我只需要檢查數組中相同 position 中的字段。

我不知道如何更好地解釋它,抱歉,並感謝您的幫助。

您可以使用$map投影輔助 boolean 數組並使用$allElementsTrue$anyElementTrue進行過濾。

db.restaurants.aggregate([
  {
    "$match": {
      $expr: {
        "$allElementsTrue": {
          "$map": {
            "input": "$grades",
            "as": "g",
            "in": {
              $and: [
                {
                  $gt: [
                    "$$g.score",
                    80
                  ]
                },
                {
                  $lt: [
                    "$$g.score",
                    100
                  ]
                }
              ]
            }
          }
        }
      }
    }
  }
])

這是您的第一個第二個查詢的 Mongo 游樂場。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM