通过API请求过滤mongodb数据



我试图找出如何通过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> }

最新更新