Отфильтровать внутреннюю коллекцию на mongodb / mongoose - PullRequest
0 голосов
/ 12 сентября 2018

Можете ли вы сказать мне, как отфильтровать на videoDetails, где vimeo_id==null? Согласно приведенному ниже запросу, он извлекает все данные. то есть, включая видео Vimeo. Здесь я использовал мангуст.

Данные:

{
  "_id": ObjectId("5b10e8c475356969da5f91b2"),
  "playlists": [{
      "listId": "5b26a1040c4ebb107f0038e5",
      "title": "Featured Stories (copy)",
      "playlist_item_count": 1,
      "sortOrder": 1,
      "_id": ObjectId("5b37adf40fc31552f9280603"),
      "isPrimary": true,
      "videoDetails": [{
        "short_description": "",
        "vimeo_id": null,
        "title": "Managing-Time-Effectively-Section-4-Lecture-1-Questions-and-Answers.mp4",
        "duration": 493,
        "videoId": "5a3c2f03e338f91564000130",
        "_id": ObjectId("5b37adf40fc31552f9280604"),
        "accessLevel": "public"
      }]
    },
    {
      "listId": "5b375560d80ed51238004998",
      "title": "Atv-test",
      "playlist_item_count": 1,
      "sortOrder": 1,
      "_id": ObjectId("5b37adf40fc31552f9280601"),
      "isPrimary": false,
      "videoDetails": [{
        "short_description": "When Alice’s husband arrives home to try and make amends it leaves her navigating a tricky situation.",
        "vimeo_id": "277029143",
        "title": "Love Is Blind",
        "duration": 385,
        "videoId": "5b375add2ef7c612f1002304",
        "presentedBy": "CEO TEAM",
        "_id": ObjectId("5b37adf40fc31552f9280602"),
        "accessLevel": "public"
      }]
    }
  ],
  "__v": 90
}

получить

 get(req) {
      mongoose.connect(config.mongoConnectionUrl, { useMongoClient: true })
      return Playlist
        .findOne({})
        .exec()
        .then((playlist) => {
          mongoose.disconnect()
          return Promise.resolve({ error: false, playlist })
        })
        .catch((e) => {
          mongoose.disconnect()
          const err = prepareApiError(e)
          return new api.ApiResponse({ error: true, reason: err.reason }, { "Content-Type": "application/json" }, err.errorCode)
        })
    },

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете попробовать ниже агрегации

db.collection.aggregate([
  { "$project": {
    "playlists": {
      "$map": {
        "input": "$playlists",
        "as": "play",
        "in": {
          "listId": "$$play.listId",
          "title": "$$play.title",
          "playlist_item_count": "$$play.playlist_item_count",
          "sortOrder": "$$play.sortOrder",
          "_id": "$$play._id",
          "isPrimary": "$$play.isPrimary",
          "videoDetails": {
            "$filter": {
              "input": "$$play.videoDetails",
              "as": "video",
              "cond": { "$ne": ["$$video.vimeo_id", null] }
            }
          }
        }
      }
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...