mongodb ObjectId 的处理方式不同



我尝试使用$in并传递一个 Id 数组来查询文档。

在这个测试中,我得到了预期的值。

Document.find({
documentId: {
$in: ['598eb5a9957d7427f41d7f08',
'5a5d863cf9d4d74f2b3d3180'
]
}
}).then(data => {
console.log(data);
});

但是当使用它时,我只是得到一个空的结果。

Document.aggregate([{
$match: {
documentId: {
$in: ['598eb5a9957d7427f41d7f08',
'5a5d863cf9d4d74f2b3d3180'
]
}
}
}]).then(data => {
console.log(data);
});

如果我将 id 显式转换为 ObjectId,我可以修复它。

Document.aggregate([{
$match: {
documentId: {
$in: [
new mongoose.Types.ObjectId(
'598eb5a9957d7427f41d7f08'
),
new mongoose.Types.ObjectId(
'5a5d863cf9d4d74f2b3d3180'
)
]
}
}
}]).then(data => {
console.log(data);
});

有什么建议为什么会这样吗?

我想省略转换对象 ID 的最后一个代码上的查询。

谢谢。

Mongoose 的文档指出,流水线阶段的处理方式与原生流水线阶段类似,因此:你必须将你的 id 转换为ObjectIds。

http://mongoosejs.com/docs/api.html#Aggregate

注意:

  • 返回的文档是纯 JavaScript 对象,而不是猫鼬文档(因为可以返回任何形状的文档)。
  • 猫鼬不施放管道阶段。除非_id是数据库中的字符串,否则以下内容将不起作用

    new Aggregate([{ $match: { _id: '00000000000000000000000a' } }]);
    // Do this instead to cast to an ObjectId
    new Aggregate([{ $match: { _id: mongoose.Types.ObjectId('00000000000000000000000a') } }]);
    

相关内容

  • 没有找到相关文章

最新更新