Mongoose如何基于嵌套对象值执行find()查询?
Mongoose嵌套对象Schema查询问题排查
问题描述
我定义了包含多层嵌套对象的Mongoose Schema:
const UserDataFrameWork = new mongoose.Schema({ HighScores: { Dodge: { TenCent: {type:Number, default: 0}, FiftyCent: {type:Number, default: 0}, Dolsu: {type:Number, default: 0}, FiveDolsu: {type:Number, default: 0}, TenDolsu: {type:Number, default: 0}, FiftyDolsu: {type:Number, default: 0}, }, example: { test: {type:Number, default: 0} } } } const User = mongoose.model('User', UserDataFrameWork) module.exports = User
尝试通过以下代码查询HighScores.Dodge.TenCent值为0的用户,但查询无法生效:
const express = require('express') const router = express.Router(); const DB = require('../models/User') router.get('/', async (req,res) =>{ const Tgames = await DB.find({"HighScores.Dodge.TenCent": 0}) console.log(Tgames) res.render('testejs.ejs') }) module.exports = router;
同时疑惑Mongoose是否支持在Schema中定义嵌套对象结构,希望得到帮助。
问题解答
1. Mongoose完全支持嵌套对象结构
你的Schema嵌套写法是合法的,但代码存在语法错误:定义UserDataFrameWork的最后缺少闭合的)和;,正确的Schema代码应该是:
const UserDataFrameWork = new mongoose.Schema({ HighScores: { Dodge: { TenCent: {type: Number, default: 0}, FiftyCent: {type: Number, default: 0}, Dolsu: {type: Number, default: 0}, FiveDolsu: {type: Number, default: 0}, TenDolsu: {type: Number, default: 0}, FiftyDolsu: {type: Number, default: 0}, }, example: { test: {type: Number, default: 0} } } }); const User = mongoose.model('User', UserDataFrameWork) module.exports = User
语法错误会导致Schema无法正确初始化,这很可能是查询失效的根本原因。
2. 嵌套字段的查询写法是正确的
你使用{"HighScores.Dodge.TenCent": 0}的查询语法完全合规,修正Schema的语法错误后,这个查询应该可以正常工作。如果仍无结果,可排查以下几点:
- 确认数据库中确实存在
HighScores.Dodge.TenCent值为0的用户文档 - 检查字段名是否存在拼写错误(包括大小写、单词拼写)
- 打印
DB对象确认模型是否正确导入 - 添加错误捕获排查异步操作异常:
router.get('/', async (req,res) =>{ try { const Tgames = await DB.find({"HighScores.Dodge.TenCent": 0}) console.log(Tgames) res.render('testejs.ejs') } catch (err) { console.error('查询出错:', err) res.status(500).send('查询失败') } })
内容的提问来源于stack exchange,提问作者vemmu
相关产品推荐
相关产品推荐

