我试图找出如何通过API请求在mongodb Atlas中过滤数据。我的json结构:
{
_id: ObjectId,
level: number,
names: Array
}
我学会了如何通过_id
进行过滤。我通过url传递id
,并使用主体中的$oid
获取带有filter
参数的数据。
但问题是:如何通过level
过滤数据并获得分配给某些level
的数据列表?我不知道用什么代替$oid
🤷🏻♂️如果我只是将id/_id
更改为level
,我不会收到任何东西。
const {
query: { id },
method,
} = req
....
const readData = await fetch(`${baseUrl}/find`, {
...fetchOptions,
body: JSON.stringify({
...fetchBody,
filter: { _id: { $oid: id } },
}),
})
这里的区别与数据类型有关。您当前的查询,在_id
上过滤时有效:
{ _id: { $oid: id } }
该查询的$oid
组件与您正在为该字段使用(默认)ObjectId类型这一事实有关。$oid
本身是该数据类型的扩展JSON表示。其他语言和接口有不同的方式来表示或构造ObjectIds。
您的level
字段有一个不同的数据类型-数字。因此,尝试对该字段执行类似的查询,例如:
{ level: { $oid: <value>} }
将导致查询失败(如果由于其特定结构而无法从<value>
创建ObjectId)或没有返回文档(因为没有文档具有此字段的ObjectId)。
去掉包装$oid
应该能解决问题:
{ level: <value> }