MongoDB使用基于子文档的Mongoose过滤器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB使用基于子文档的Mongoose过滤器相关的知识,希望对你有一定的参考价值。

我和Dish之间有一对多的关系。一道菜可以有很多评论。以下是菜单和评论的Mongoose Schema:

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)
})

我错过了什么?

答案

您无法显式引用数组的length属性。要检查数组是否为空,您可以检查它是否为$type "array",如果它的$size$not 0

Dish.find({ reviews: { $type: "array", $not: { $size: 0 } } },
    function(error,dishes){
      console.log(dishes)
})

以上是关于MongoDB使用基于子文档的Mongoose过滤器的主要内容,如果未能解决你的问题,请参考以下文章

基于多个子文档的MongoDB/Mongoose查询

如何使用子文档数组更新 MongoDB 文档

MongoDB:如何使用 Mongoose 添加或更新子文档?

使用 mongoose 从 Mongodb 中删除子文档

如何在 mongoose/mongodb 查询子文档中使用 mapreduce?

如何在 mongoose/mongodb 查询子文档中使用 mapreduce?