问题在聚合函数中搜索一系列objectids



我正在尝试做一些应该很简单的事情。凝结管道使您可以按顺序通过文档。例如,我可以过滤一些文档,并将我想要的文档传递到下一阶段。这可以通过$匹配来完成。然后,我想将剩余的文档放在字段中,以检查重复项。但是我有重大问题。这就是我尝试的:

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}  } } 
)

除了第一个$匹配,查询工作正常。在语句中的$中,我会遇到此错误:

2019-05-17T18:47:56.602-0400 E QUERY    [js] SyntaxError: missing ] after element list @(shell):2:95

它在这里抱怨这部分:

BSON::ObjectId('5cddd0143ed1495e5c000008'),BSON::ObjectId('5cddd0143ed1495e5c000010')

如何解决此问题并实现我的基本查询工作的目标?

不需要将objectid转换为bson:

https://docs.mongodb.com/manual/reference/method/db.collection.find/#query-using-operators

// ...
'$match': {
    related_code_id: {
        "$in": [
            ObjectId('5cddd0143ed1495e5c000008'),
            ObjectId('5cddd0143ed1495e5c000010')
        ]
    }
}
// ...

如果您使用的是mongoose as 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}  } } 
)

最新更新