Mongoose中的 ObjectId 什么情况下与字符串 id 等价

经验证,在使用 Mongoose 包来进行 MongoDB 查询时,在非聚合(aggregate)语句中,可以直接使用字符串型 ObjectId 进行匹配查找和赋值,比如:create、find、findOne、findByIdAndDelete、$in 等方法中都可以使用字符串型 ObjectId。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
model.find({
_id: '5f68710c4da61820f461e0c0'
})

model.find({
_id:{$in:['5f68710c4da61820f461e0c0']}
})

model.updateMany({
_id:{$in:['5f68710c4da61820f461e0c0']}
},
{
// 也可以用字符串id数组赋值给 ObjectId 数组字段
ids: ['5f68710c4da61820f461e0c0']
})

上面的这种字符串 id 去匹配 ObjectId 机制,在聚合中不支持,在聚合中使用时,需要将字符串的 Id 转成 ObjectId。