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 添加或更新子文档?