尝试将Mongoose模型拆分为子文档。

huangapple go评论78阅读模式
英文:

Trying to split Mongoose models out into sud documents

问题

我确信这一定是某处语法问题。我有一个Mongoose模型,其中的一部分看起来是这样的:

  1. SMS_Data: {
  2. _id: false,
  3. SMS_User: [{
  4. Username: {
  5. type: String
  6. },
  7. Password: {
  8. type: String
  9. }
  10. }]
  11. }

这是正常的,但我试图将其拆分为子文档。所以我创建了一个名为SMS_User.js的模型,内容如下:

  1. const mongoose = require('mongoose');
  2. const sms_user = mongoose.Schema({
  3. SMS_User: {
  4. Username: {
  5. type: String
  6. },
  7. Password: {
  8. type: String
  9. }
  10. }
  11. })
  12. module.exports = sms_user;

我通过以下方式将其引入主模型:

  1. const sms_user = require('./SMS_User');

并尝试更改主模型,使其如下所示:

  1. SMS_Data: {
  2. _id: false,
  3. SMS_User: [sms_user]
  4. }

但这不起作用。与我预期的基于Username和Password选择用户不同。但当我从我的登录控制器中使用以下方式时:

  1. const user = await my_model.findOne({ 'SMS_Data.SMS_User.Username': userId, 'SMS_Data.SMS_User.Password': userPw });

它只选择集合中的第一条记录,而不是我使用非嵌套版本的模型时所期望的正确记录。这让我认为子模型的嵌套可能有问题。

就像我说的,这可能非常明显,但我只是看不出我哪里错了。

提前谢谢。

英文:

I'm sure this is a syntax issue somewhere along the way. I've got a Mongoose model where part of it looks like this:

  1. SMS_Data: {
  2. _id: false,
  3. SMS_User: [{
  4. Username: {
  5. type: String
  6. },
  7. Password: {
  8. type: String
  9. }
  10. }]
  11. }

This works fine, but I'm trying to split things out into subdocuments. So I've created a SMS_User.js model that looks like this:

  1. const mongoose = require('mongoose');
  2. const sms_user = mongoose.Schema({
  3. SMS_User: {
  4. Username: {
  5. type: String
  6. },
  7. Password: {
  8. type: String
  9. }
  10. }
  11. })
  12. module.exports = sms_user;

I require it into the main model using:
const sms_user = require('./SMS_User');

And tried changing the main model to now read like this:

  1. SMS_Data: {
  2. _id: false,
  3. SMS_User: [sms_user]
  4. }

But this doesn't work. Instead of selecting the user I expected, based on the Username and Password. But when I use this from my login controller:

  1. const user = await my_model.findOne({ 'SMS_Data.SMS_User.Username': userId, 'SMS_Data.SMS_User.Password': userPw });

it just selects the first record in the collection, instead of the correct one when I use the un-nested version of the model. Which suggest to me that the nesting of the sub model is wrong.

Like I say this could be glaringly obvious, but I'm just not seeing where I'm going wrong.

Thanks in advance.

答案1

得分: 1

你已经错误地拆分了模式,因为你添加了额外的嵌套层级(即'SMS_Data.SMS_User.SMS_User.Username'等)。

你需要从sms_user模式中移除SMS_User

英文:

the way you have broken down the schema is wrong since you have added an extra level of nesting (i.e 'SMS_Data.SMS_User.SMS_User.Username' etc).

You need to remove the SMS_User from sms_user schema

  1. const sms_user = mongoose.Schema({
  2. Username: {
  3. type: String
  4. },
  5. Password: {
  6. type: String
  7. }
  8. })
  9. const parentSchema = mongoose.Schema({
  10. //other fields
  11. SMS_Data: {
  12. _id: false,
  13. SMS_User: [sms_user]
  14. }
  15. })

huangapple
  • 本文由 发表于 2023年5月10日 23:51:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/76220436.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定