mongodb ObjectId 被区别对待
mongodb ObjectId is treated differetly
我尝试使用 $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);
});
为什么会发生这种情况有什么建议吗?
我想省略关于转换 objectId 的最后一段代码的查询。
谢谢。
Mongoose 的文档声明管道阶段的处理方式与本机管道阶段一样,因此:您必须将您的 ID 转换为 ObjectId
s。
http://mongoosejs.com/docs/api.html#Aggregate
Note:
- The documents returned are plain javascript objects, not mongoose documents (since any shape of document can be returned).
Mongoose does not cast pipeline stages. The below will not work unless _id is a string in the database
new Aggregate([{ $match: { _id: '00000000000000000000000a' } }]);
// Do this instead to cast to an ObjectId
new Aggregate([{ $match: { _id: mongoose.Types.ObjectId('00000000000000000000000a') } }]);
我尝试使用 $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);
});
为什么会发生这种情况有什么建议吗?
我想省略关于转换 objectId 的最后一段代码的查询。
谢谢。
Mongoose 的文档声明管道阶段的处理方式与本机管道阶段一样,因此:您必须将您的 ID 转换为 ObjectId
s。
http://mongoosejs.com/docs/api.html#Aggregate
Note:
- The documents returned are plain javascript objects, not mongoose documents (since any shape of document can be returned).
Mongoose does not cast pipeline stages. The below will not work unless _id is a string in the database
new Aggregate([{ $match: { _id: '00000000000000000000000a' } }]); // Do this instead to cast to an ObjectId new Aggregate([{ $match: { _id: mongoose.Types.ObjectId('00000000000000000000000a') } }]);