搜索集合函数中的ObjectId数组时出现问题

时间:2019-05-17 22:51:33

标签: database mongodb nosql

我正在尝试做一些应该非常简单的事情。聚集管道使您可以按顺序传递文档。例如,我可以过滤掉一些文档并将所需的文档传递到下一阶段。这可以通过$ 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')

如何解决此问题并实现我的基本查询正常运行的目标?

2 个答案:

答案 0 :(得分:0)

不需要将ObjectId转换为BSON:

click me

// ...
'$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}  } } 
)