MongoDB Использование фильтра Mongoose на основе вложенных документов - PullRequest
0 голосов
/ 02 июля 2018

У меня есть отношения один-ко-многим между Блюдо и Обзор. Одно блюдо может иметь много отзывов. Вот схема мангуста для блюда и обзора:

const mongoose = require('mongoose')
const Review = require('./reviewSchema')

// defining the structore of your document
let dishSchema = mongoose.Schema({
  name : String,
  price :Number,
  imageURL :String,
  reviews : [Review.schema]
})

// convert the schema into a model class which you can use in your code
const Dish = mongoose.model('Dish',dishSchema)

module.exports = Dish


const mongoose = require('mongoose')

let reviewSchema = mongoose.Schema({
  title : String,
  description :String
})

const Review = mongoose.model('Review',reviewSchema)

module.exports = Review 

У меня проблема в том, что я хочу получить все блюда, если у них есть хотя бы один отзыв. Вот код, который я написал, который возвращает пустой массив.

Dish.find({
  "reviews.length" : { $gt : 0 }
},function(error,dishes){
  console.log(dishes)
})

Чего мне не хватает?

1 Ответ

0 голосов
/ 02 июля 2018

Вы не можете явно ссылаться на length свойство массива. Чтобы проверить, является ли массив не пустым, вы можете проверить, имеет ли он тип $ "array" и является ли его $ size равным $, а не 0.

Dish.find({ reviews: { $type: "array", $not: { $size: 0 } } },
    function(error,dishes){
      console.log(dishes)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...