首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对模型的“路径”的值"_id“转换为_id失败

对模型的“路径”的值"_id“转换为_id失败
EN

Stack Overflow用户
提问于 2019-02-01 09:32:15
回答 1查看 1.5K关注 0票数 1

我已经检查了StackOverflow上的其他条目,但是没有帮助。

我正在用node.js构建一个node.js,我使用MongoDBmongoose,我有一个包含三种不同模型的Schema。我能够将POST请求保存到条目中。我确信该条目是保存的,因为我检查了atlas.mongo。然而,当我试图使用GET请求时,我遇到了一个问题。

它给出了这个错误:

对模型的“路径”的值"_id“转换为_id失败

这些是我的模型:(这些模型位于不同的文件中)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Model1 = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    word1: { type: [String], require: true }
});
----------------------------------------------
const Model2 = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    word2: { type: [String], require: true }
});
----------------------------------------------
const Model3 = mongoose.Schema({
   _id: mongoose.Schema.Types.ObjectId,
   element1: { type: [String],  default: ""},
   element2: { type: [String], default: ""}
});
----------------------------------------------
const Word = mongoose.Schema({
   _id: mongoose.Schema.Types.ObjectId,
   md3: { type: mongoose.Schema.Types.Mixed, ref: 'Model3', require: true },
   md2: { type: mongoose.Schema.Types.Mixed, ref: 'Model2', require: true },
   md1: { type: mongoose.Schema.Types.Mixed, ref: 'Model1', require: true }
});

这是我的POST请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.entry_create = (req, res, next) => {
const newModel3 = new Model3({
    _id: new mongoose.Types.ObjectId(),
    element1: req.body.element1,
    element2: req.body.element2
});

const newModel2 = new Model2({
    _id: new mongoose.Types.ObjectId(),
    word2: req.body.word2
});

const newModel1 = new Model1({
    _id: new mongoose.Types.ObjectId(),
    word1: req.body.word1
});

const newEntry = new Word({
    _id: new mongoose.Types.ObjectId(),
    md3: newModel3,
    md2: newModel2,
    md1: newModel1
});

newEntry
    .save(); // i have also then() and catch() part
};

这就是我在Postman上得到错误的地方

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.entry_get_all = (req, res, next) => {
Word.find()
    .select('_id md3 md2 md1')
    .populate('md3')
    .populate('md2')
    .populate('md1')
    .exec()
    .then(docs => {
        res.status(200).json({
            numOfEntries: docs.length,
            Entries: docs.map(doc => {
                return {
                    _id: doc._id,
                    md3: doc.md3,
                    md2: doc.md2,
                    md1: doc.md1,
                    request: { type: 'GET' }
                }
            })
        });
    }); // i have also catch() part
};

有什么问题吗?是_idmd3, md2 & md1的返回null

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-01 09:51:43

我相信这与你的参考资料md1,md2和md3有关。引用另一个模型的方式是_id,在您的例子中它是和ObjectId。也就是说,当定义md1、md2和md3时,您会说类型是混合的,而不是ObjectId。取而代之的是这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Word = mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  md3: { type: mongoose.Schema.Types.ObjectId, ref: 'Model3', require: true },
  md2: { type: mongoose.Schema.Types.ObjectId, ref: 'Model2', require: true },
  md1: { type: mongoose.Schema.Types.ObjectId, ref: 'Model1', require: true }
});

还要注意:在创建模型实例时,不需要显式创建新的ObjectId。如果使用猫鼬,它会为您创建_id!因此,您可以创建这样一个新的Word

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let md1 = null;
let md2 = null;
let md3 = null;

const newModel3 = new Model3({
  element1: req.body.element1,
  element2: req.body.element2
});

// Save newModel3
newModel3.save()
.then((_md3) => {
  md3 = _md3;

  const newModel2 = new Model2({
    word2: req.body.word2
  });

  return newModel2.save();
})
.then((_md2) => {
  md2 = _md2;

  const newModel1 = new Model1({
    word1: req.body.word1
  });

  return newModel1.save();
})
.then((_md1) => {
  md1 = _md1

  const newEntry = new Word({
    md3: md3._id,
    md2: md2._id,
    md1: md1._id
  });

  return newEntry.save();
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54484412

复制
相关文章
用C#实现模拟双色球中奖控制台应用程序
简单地运用CSharp语言和.net平台,如变量、方法、类、数组、字典、系统函数、规范的注释、控制台输出、文件的读写、程序怎样设计等。
摘繁华
2022/08/31
1.2K0
用C#实现模拟双色球中奖控制台应用程序
用C#实现模拟双色球中奖控制台应用程序
简单地运用CSharp语言和.net平台,如变量、方法、类、数组、字典、系统函数、规范的注释、控制台输出、文件的读写、程序怎样设计等。
摘繁华
2022/05/03
1.4K0
用C#实现模拟双色球中奖控制台应用程序
C# 控制台应用程序输出颜色字体[更正版]
首先感谢院子里的“yanxinchen”,之前的方法是通过c#调用系统api实现的,相比之下我的有点画蛇添足了,哈哈。 最佳解决方案的代码: static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Hello, color text!"); Console.ForegroundColor = ConsoleColor.Red; Cons
磊哥
2018/05/09
2K0
C# 控制台应用程序输出颜色字体[更正版]
使用C#创建SQLite控制台应用程序
本文介绍了如何使用C#和SQLite数据库来创建一个简单的登录系统,并给出了具体的代码示例。主要实现了用户登录、注册、修改个人信息和查询个人信息等功能。使用了SQLiteStudio工具来创建数据库,并使用了System.Data.SQLite.dll库进行数据库操作。
CNXY
2017/12/25
2.5K0
使用C#创建SQLite控制台应用程序
使用C#创建WCF服务控制台应用程序
本文介绍如何使用C#创建WCF服务控制台应用程序。首先,作者演示了如何将WCF服务添加到现有的Visual Studio 2019项目。然后,他演示了如何编写服务合同,并添加数据契约。最后,他演示了如何将控制台应用程序与WCF服务连接,并调用服务的方法。
CNXY
2017/12/25
2.1K0
使用C#创建WCF服务控制台应用程序
CSharp实现模拟双色球控制台应用程序
这是我在大一第一学期C#的课程设计,要求编写一个模拟双色球彩票的控制台应用程序,用以实现简单的模拟选购彩票。
摘繁华
2021/12/27
1.6K0
CSharp实现模拟双色球控制台应用程序
「业务架构」如何在BPMN中正确使用泳道
池是设置业务流程边界的基本BPMN元素。池最多包含一个业务流程。这意味着两个流程程必须在两个不同的池中建模。池可以以将要执行的流程的形式具有可见的内部详细信息(称为“白盒池”),或者池可能没有可见的内部详细信息(称为“黑盒池”)。应该使用的池类型取决于所需的详细程度和特定的上下文。
架构师研究会
2020/07/20
2.2K0
「业务架构」如何在BPMN中正确使用泳道
[C#]实现任何数据库类型的DbHelper帮助类 使用C#创建SQLite控制台应用程序
我们可以看到,在此类中,有很多用于创建数据库相关对象的类型,如DbConnection,DbCommand,DbDataAdapter等。
CNXY
2019/05/24
4.2K0
聊聊如何在spring事务中正确进行远程调用
最近和朋友聊天,他说他承接的外包项目遇到了分布式事务问题,问我有没啥解决方案,我本可以直接跟他说,分布式事务方案网上一大堆,什么tcc、可靠消息一致性、最大努力通知之类的,直接网上找个试下,比如直接用阿里的seata。但我并没有这么做,因为分布式事务,本来就是一个很复杂的课题,真正落地的时候,会发现有时候是多种分布式方案一起混用,而非一种方案走到黑。
lyb-geek
2022/01/07
7110
如何在Laravel 5中正确设置文件权限
为任何Web应用程序设置适当的文件权限是Web托管的重要部分。 在本教程中,您将学习如何在Linux Web服务器上托管的Laravel应用程序上正确配置文件权限。
星哥玩云
2022/07/27
5.7K0
如何在Pytorch中正确设计并加载数据集
但在实际的训练过程中,如何正确编写、使用加载数据集的代码同样是不可缺少的一环,在不同的任务中不同数据格式的任务中,加载数据的代码难免会有差别。为了避免重复编写并且避免一些与算法无关的错误,我们有必要讨论一下如何正确加载数据集。
老潘
2023/10/19
3990
如何在Pytorch中正确设计并加载数据集
聊聊如何在spring事务中正确进行远程调用
最近和朋友聊天,他说他承接的外包项目遇到了分布式事务问题,问我有没啥解决方案,我本可以直接跟他说,分布式事务方案网上一大堆,什么tcc、可靠消息一致性、最大努力通知之类的,直接网上找个试下,比如直接用阿里的seata。但我并没有这么做,因为分布式事务,本来就是一个很复杂的课题,真正落地的时候,会发现有时候是多种分布式方案一起混用,而非一种方案走到黑。
lyb-geek
2021/04/29
1K0
聊聊如何在spring事务中正确进行远程调用
[C#] 控制台应用程序退出事件
在 .NET 中,是否有一种方法(例如事件)来检测控制台应用程序何时退出?你可能需要清理一些线程和 COM 对象.,记录一下信息等等。。。。。。。 比如我的数据采集软件,每次启动和退出时向钉钉推送相关
科控物联
2022/04/19
2.9K0
[C#] 控制台应用程序退出事件
如何在 Node.js 中正确的使用日志对象
日志,是开发者排查问题的非常重要的手段,有时候甚至是唯一的,所以如何合理并正确的打印日志,成了开发时的重中之重。
程序狗
2022/01/04
1.1K0
如何在 JS 循环中正确使用 async 与 await
你想从fruitBasket获得每个水果的数量。 要获取水果的数量,可以使用getNumFruit函数。
前端小智@大迁世界
2019/06/15
5K0
如何在网页设计中正确应用色彩?
以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器。
奔跑的小鹿
2019/06/24
1.2K0
如何在 JS 循环中正确使用 async 与 await
async 与 await 的使用方式相对简单。 当你尝试在循环中使用await时,事情就会变得复杂一些。
桃翁
2019/06/18
4.6K0
如何在 JS 循环中正确使用 async 与 await
如何在 Node.js 中正确的使用日志对象
地址:https://mp.weixin.qq.com/s/Pb51aYdrxAALM_wR4asDgg
coder_koala
2021/08/26
9840
C# 控制台使用 UAC 权限
本文告诉大家如何在 C# 控制台项目使用 UAC 权限。这个方法在 WPF 和 控制台都是可以使用。
林德熙
2018/09/19
1.5K0
C# 控制台使用 UAC 权限
如何在 Linux 上锁定虚拟控制台会话 如何在 Linux 上锁定虚拟控制台会话
当你在共享的系统上工作时,你可能不希望其他用户偷窥你的控制台中看你在做什么。如果是这样,我知道有个简单的技巧来锁定自己的会话,同时仍然允许其他用户在其他虚拟控制台上使用该系统。要感谢 Vlock(Virtual Console lock),这是一个命令行程序,用于锁定 Linux 控制台上的一个或多个会话。如有必要,你可以锁定整个控制台并完全禁用虚拟控制台切换功能。Vlock 对于有多个用户访问控制台的共享 Linux 系统特别有用。
用户8639654
2021/10/26
2.2K0

相似问题

如何在libgdx中正确地实现声音切换?

14

我如何实现声音通知,如whatsapp?

13

如何在C#中正确退出/停止/处置控制台应用程序

31

如何在c#控制台应用程序中正确处理异常

11

如何在C#控制台应用程序中正确写出下载状态?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文