使用_id查找不适用于聚合[重复]
Posted
技术标签:
【中文标题】使用_id查找不适用于聚合[重复]【英文标题】:Find using _id not working with aggregation [duplicate] 【发布时间】:2019-03-23 00:07:08 【问题描述】:我是 mongodb 的初学者,我正在尝试在 node.js 应用程序中使用 mongoose 编写查询:
const objectIdValue = secondId.valueOf();
const existedRelation = await this.model.aggregate([
$match: _id: firstId ,
$project:
relations:
$filter:
input: '$links',
as: 'link',
cond:
$and: [
$eq: ['$$link.target.entityId', `$objectIdValue`] ,
$eq: ['$$link.linkTypeId', linkTypeId] ,
],
,
,
,
,
,
]);
console.log('existedRelation: ', existedRelation);
当我执行它时,我得到了这个结果:
existedRelation: []
我尝试使用 mongoShell 执行它:
db.tasks.aggregate([
$match: _id: ObjectId("5bbf5800be37394f38a9727e") ,
$project:
relations:
$filter:
input: '$links',
as: "link",
cond:
$and: [
$eq:["$$link.target.entityId", '5bbf52eabe37394f38a97276'],
$eq: ["$$link.linkTypeId", ObjectId("5bbf4bfcb075e03bd4a1b779")]
]
我得到了我想要的结果。我犯了什么错误?
【问题讨论】:
【参考方案1】:Mongoose 不会在聚合函数中将 String
转换为 ObjectId
。所以你必须使用猫鼬手动投射它。
var mongoose = require('mongoose')
const existedRelation = await this.model.aggregate([
"$match": "_id": mongoose.Types.ObjectId(firstId) ,
"$project":
"relations":
"$filter":
"input": "$links",
"as": "link",
"cond":
"$and": [
"$eq": ["$$link.target.entityId", `$objectIdValue`] ,
"$eq": ["$$link.linkTypeId", linkTypeId]
]
])
【讨论】:
好的,linkTypeId
也应该转换为 "$eq": ["$$link.linkTypeId", mongoose.Types.ObjectId(linkTypeId)]
以上是关于使用_id查找不适用于聚合[重复]的主要内容,如果未能解决你的问题,请参考以下文章