[MONGODB] 집계 작동하지 _id 사용하여 찾기 [중복]
MONGODB집계 작동하지 _id 사용하여 찾기 [중복]
나는 MongoDB를하는 초보자 그리고 난 Node.js를 응용 프로그램에서 몽구스를 사용하여 쿼리를 작성하려고 해요 :
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: []
나는 몽고 셸을 사용하여 실행하려고 :
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.몽구스는 집계 함수에 ObjectId가에 문자열을 캐스팅하지 않습니다. 그래서 당신은 몽구스를 사용하여 수동으로 캐스팅해야합니다.
몽구스는 집계 함수에 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] } ] } } } }} ])
from https://stackoverflow.com/questions/52869651/find-using-id-not-working-with-aggregation by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 하나의 호출로 여러 MongoDB의 문서를 작성하고 업데이트 (0) | 2019.12.20 |
---|---|
[MONGODB] 몽고 집계 : $ 그룹과 계산에 대한 객체 $ 프로젝트 배열 (0) | 2019.12.20 |
[MONGODB] Golang는 빈 객체를 받고 MGO (0) | 2019.12.20 |
[MONGODB] 어떻게 클러스터 제대로 자바 드라이버를 통해 아틀라스 M0 (무료 계층)에 연결? (0) | 2019.12.20 |
[MONGODB] MongoDB를 후 Heroku가 응용 프로그램 충돌 3.0로 업데이트 (0) | 2019.12.20 |