簡體   English   中英

嵌入式文檔上的Mongodb node.js查詢具有多個值的單個字段。

[英]Mongodb node.js query on Embedded document Single field having multiple values.

誰能建議我如何只從收藏夾中獲取那些記錄? 在我的嵌入式文檔中有多個匹配的值。 這是我的具有名稱用戶的收藏集。

{
"_id": "5b86fd75d595a923452366d7",
"name": "Mike I",
"email": "ppp@ppp.com",
"status": true,
"role": "seller",
"parking_space": [
{
    "_id": "5b8cc33846e5360e741cae77",
    "parking_name": "New Parking",
    "street_address": "700 broadway",
    "opening_days_and_timings": [
    {
        "day": "Monday",
        "opening_time": "09:00",
        "closing_time": "10:00",
        "_id": "5b9119c93f7bc41306745a57"
    },
    {
        "day": "Sunday",
        "opening_time": "22:30",
        "closing_time": "23:30",
        "_id": "5b9119c93f7bc41306745a58"
    },
    {
        "day": "Tuesday",
        "opening_time": "11:00",
        "closing_time": "23:59",
        "_id": "5b9119c93f7bc41306745a59"
    }],
    "location":
    {
        "type": "Point",
        "coordinates": [-117.15833099999998, 32.7157529]
    },
    "status": true,
},
{
    "_id": "5b8e1df246e5360e741cae8a",
    "parking_name": "Gupta's parking",
    "street_address": "IT Park Rd, Phase - I",
    "opening_days_and_timings": [
    {
        "day": "Wednesday",
        "opening_time": "00:00",
        "closing_time": "23:59",
        "_id": "5b9119df3f7bc41306745a60"
    },
    {
        "day": "Thursday",
        "opening_time": "00:00",
        "closing_time": "23:59",
        "_id": "5b9119df3f7bc41306745a61"
    }],
    "location":
    {
        "type": "Point",
        "coordinates": [76.84613349999995, 30.7259198]
    },
    "status": true,
}}

我在這里要做的是僅獲取那些停車日為“ Wednesday”和“ Thursday”的停車數據,而我只是想要該停車數據。 像這樣。

{
"_id": "5b86fd75d595a923452366d7",
"name": "Mike I",
"email": "ppp@ppp.com",
"status": true,
"role": "seller",
"parking_space": [
{
    "_id": "5b8e1df246e5360e741cae8a",
    "parking_name": "Gupta's parking",
    "street_address": "IT Park Rd, Phase - I",
    "opening_days_and_timings": [
    {
        "day": "Wednesday",
        "opening_time": "00:00",
        "closing_time": "23:59",
        "_id": "5b9119df3f7bc41306745a60"
    },
    {
        "day": "Thursday",
        "opening_time": "00:00",
        "closing_time": "23:59",
        "_id": "5b9119df3f7bc41306745a61"
    }],
    "location":
    {
        "type": "Point",
        "coordinates": [76.84613349999995, 30.7259198]
    },
    "status": true,
}}

並得到這樣的結果,我正在使用查詢如下,但它沒有像我想要的那樣返回我。 以下是我正在使用的查詢。

User.aggregate([{
            "$match": {
                "parking_space.location": {
                    "$geoWithin": {
                        "$centerSphere": [
                            [parseFloat(req.body.long), parseFloat(req.body.lat)], 7 / 3963.2
                        ]
                    }
                },
                $and : [ { "parking_space.opening_days_and_timings.day" : 'Thursday' }, { "parking_space.opening_days_and_timings.day" : 'Wednesday' } 
                "parking_space.opening_days_and_timings.day": getDayOfWeek(req.body.date)
            }
        }, {
            "$unwind": "$parking_space"
        }, {
            "$match": {
                "parking_space.location": {
                    "$geoWithin": {
                        "$centerSphere": [
                            [parseFloat(req.body.long), parseFloat(req.body.lat)], 7 / 3963.2
                        ]
                    }
                },
            }
        }], function(err, park_places) {
            if (err) {
                return res.send({
                    data: err,
                    status: false
                });
            } else {
                return res.send({
                    data: park_places,
                    status: true,
                    msg: "Parking data according to location"
                });
            }
        });

這是我正在使用的查詢,不會返回上面的期望結果,有人可以建議我一些東西來獲得結果

您可以使用以下聚合。

User.aggregate([
  {
    "$match": {
        "parking_space.location": {
            "$geoWithin": {
                "$centerSphere": [
                    [parseFloat(req.body.long), parseFloat(req.body.lat)], 7 / 3963.2
                ]
            }
        },
        {"parking_space.opening_days_and_timings.day" :{"$in":['Thursday', 'Wednesday', getDayOfWeek(req.body.date)]}}
    }
  },{ 
    "$addFields": {
          "parking_space": {
            "$filter": {
              "input": "$parking_space",
              "cond": {"$setIsSubset":[['Thursday', 'Wednesday', getDayOfWeek(req.body.date)], "$$this.opening_days_and_timings.day"]}
            }
          }
      }
  }
], 
function(err, park_places) {
  if (err) {
      return res.send({
          data: err,
          status: false
      });
  } else {
      return res.send({
          data: park_places,
          status: true,
          msg: "Parking data according to location"
      });
  }
});

暫無
暫無

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

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