You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:35:40