Mongoose $ in [ObjectIds]返回0条记录

问题描述 投票:0回答:1

在我们的猫鼬模型中,我们有一个产品引用了一篇文章。

这是架构的一部分:

const product = new Schema({
  article_id: Schema.Types.ObjectId,
  title: String,
  description: String,
...

在API中,我们正在寻找引用特定文章列表的产品,而我想使用$ in运算符:

const articles = ["5dcd2a95d7e2999332441825", 
                    "5dcd2a95d7e2999332441827", 
                    "5dcd2a96d7e2999332441829"]
filter.article_id = {
  $in: articles.map(
    article => new mongoose.Types.ObjectId(article)
  ),
};

return Product.find({ ...filter })

这将返回0条记录,但是我确定它应该至少返回3条记录。查看控制台日志,所发生的就是在ObjectId转换期间从数组中删除了双引号。

然后,我通过为每个映射数组项返回{$oid: "id goes here"},尝试了一种不同的方法:

const articles = ["5dcd2a95d7e2999332441825", 
                    "5dcd2a95d7e2999332441827", 
                    "5dcd2a96d7e2999332441829"]
filter.article_id = {
  $in: articles.map(
    article => ({$oid: article})
  ),
};

return Product.find({ ...filter })

这给出了一个不同的数组:

console.log(filter);
// {article_id: {$in: [{$oid: "5dcd2a95d7e2999332441825"}, {$oid: "5dcd2a95d7e2999332441827"}, {$oid: "5dcd2a96d7e2999332441829"}]}}

但是在这种情况下,我得到以下错误:

CastError:对值“ \” {$ oid:\“ 5dcd2a95d7e2999332441825 \”} \“”的对象ID转换失败。

尽管-如果我使用该特定的控制台记录的过滤器,并将其作为过滤器传递到Studio 3T中,则确实可以获得所需的结果。

知道在这种情况下我做错了什么吗?

mongodb mongoose objectid
1个回答
0
投票

操我!我只是个大笨蛋。.显然在.skip(10)方法之后添加了find() -.-'....现在,我明白为什么0记录返回了...在此花费了数小时..

© www.soinside.com 2019 - 2024. All rights reserved.