我正在尝试做一些应该非常简单的事情。聚集管道使您可以按顺序传递文档。例如,我可以过滤掉一些文档并将所需的文档传递到下一阶段。这可以通过$ match完成。然后,我要取出其余文档,并按字段将其分组以检查是否重复。但是我对此有重大问题。这是我尝试过的:
db.my_fields.aggregate(
{ '$match' : { related_code_id: { "$in" : [ BSON::ObjectId('5cddd0143ed1495e5c000008'),BSON::ObjectId('5cddd0143ed1495e5c000010')] } } },
{ '$group' : { _id: { 'field' : '$field', 'field_type_id' : '$field_type_id' }, count: { '$sum' : 1} } },
{'$match' : { count: {'$gt' : 1} } }
)
除了第一个$ match之外,该查询工作正常。在$ in语句中,出现此错误:
2019-05-17T18:47:56.602-0400 E QUERY [js] SyntaxError: missing ] after element list @(shell):2:95
它在这里抱怨这部分:
BSON::ObjectId('5cddd0143ed1495e5c000008'),BSON::ObjectId('5cddd0143ed1495e5c000010')
如何解决此问题并实现我的基本查询正常运行的目标?
答案 0 :(得分:0)
不需要将ObjectId转换为BSON:
// ...
'$match': {
related_code_id: {
"$in": [
ObjectId('5cddd0143ed1495e5c000008'),
ObjectId('5cddd0143ed1495e5c000010')
]
}
}
// ...
答案 1 :(得分:0)
如果将猫鼬用作ORM,则可以按以下方法解决。
db.my_fields.aggregate(
{ '$match' : { related_code_id: { "$in" : [ mongoose.Types.ObjectId('5cddd0143ed1495e5c000008'),mongoose.Types.ObjectId('5cddd0143ed14 95e5c000010')] } } },
{ '$group' : { _id: { 'field' : '$field', 'field_type_id' : '$field_type_id' }, count:
{ '$sum' : 1} } },
{'$match' : { count: {'$gt' : 1} } }
)