mongodb - 如何通过 REST API GET 调用引用 mongodb 数据库中的 _id 字段?
问题描述
这很难解释,所以请多多包涵。
我有一个基于 Nestjs 的服务器,它使用 MongoDB 作为后端。以下是 mongodb 集合中的三个条目:
{"_id":{"$oid":"5e87ef7a9cf8648fac6b9f1e"},"complete":false,"editMode":false,"createdAt":{"$date":{"$numberLong":"1585966970857"}},"createdBy":"user","isDeleted":false,"title":"Make a birthday cake","note":"Make sure she poops."}
{"_id":{"$oid":"5e87f081237c70a6782d6c2a"},"createdAt":{"$date":{"$numberLong":"1585967233825"}},"createdBy":"user","isDeleted":false,"complete":false,"editMode":false,"title":"Clean the kitchen","note":"Use Lysol"}
{"_id":{"$oid":"5e87f73be81d7e0061311187"},"createdAt":{"$date":{"$numberLong":"1585968955971"}},"createdBy":"user","isDeleted":false,"complete":false,"editMode":false,"title":"Walk the dog","note":"Make sure she poops."}
这是我的模型:
@Entity()
export class Todo {
@ObjectIdColumn()
@Transform(value => value.toString(), { toPlainOnly: true })
id: ObjectID;
@Column({ length: 100 })
title: string;
@Column({ length: 5000 })
note: string;
@Column()
complete: boolean;
@Column()
editMode: boolean;
@Exclude() @Column() createdAt: Date = new Date();
@Exclude() @Column() createdBy: string = 'user';
@Exclude() @Column() isDeleted: boolean = false;
}
这是我的 GET-er 东西:
@Get(':id')
async getTodo(@Param('id') id: number) {
return this.todosService.getTodo(id);
}
async getTodo(id: number): Promise<Todo | undefined> {
return this.todosRepository.findOne(id, {
where: {
isDeleted: false,
},
});
}
我想运行一个 REST GET 调用来检索其中一个文档,比如第三个文档。因此我在浏览器中调用:
http://localhost:3000/todos/5e87f73be81d7e0061311187
好吧,这将返回第一个文档。事实上,我调用的任何东西都只返回第一个文档。
我的 GET 调用应该是什么来获取第三个项目?
我可以提供任何可能需要的进一步信息。
解决方案
首先,我认为 id 参数(id:数字)应该是一个字符串。此外,findone 在第一个参数本身中获取所有查询参数(至少在 JS 中),所以它应该像 todoRepository.findOne({_id .$oid: string, isDeleted: false })。你能告诉我什么是$oid吗?ObjectId 类型?我没有使用nest.js/ typescript。根据这一点,您可能希望改进查询参数中的 $oid。
推荐阅读
- javascript - 在我的公共 git 存储库中公开为“字符串”的 API 密钥
- javascript - 访问列表中的对象
- reactjs - 如何控制 cloudinary-react Video 组件中的 video-element
- java - 休眠级联一对多无法正确连接孩子与父母
- laravel - JWT Auth 应请求未经身份验证
- ios - 视频无法在 Safari iOS 中播放,但会在 Chrome 中播放
- javascript - 如何序列化两个表格和整个表格
- python - 从桌面运行 Tkinter 应用程序
- .net - .NET 嵌入式资源,将 IntPtr 获取到原始内存位置以用于非托管代码
- sql - 带有“其他”选项的复选框的最佳 SQL 模式