Azure Data Copy Tool中MongoDB collectionX过滤查询报错问题咨询
解决Azure Data Copy Tool中MongoDB查询过滤无效的问题
原查询的核心问题
- 格式不符合工具要求:Azure Data Copy Tool不需要完整的
db.CollectionX.find()语句,只需传入查询筛选器(即find()方法的第一个参数对象)。 - 字段引用错误:集合中
creationDate是BSON Date类型(扩展JSON用$date标识),查询时直接使用creationDate字段即可,无需加.$date后缀。
针对需求的修正方案
你的需求是过滤掉creationDate在2024年7月1日(对应Unix毫秒时间戳1725072000000)之后的事件,分两种场景处理:
场景1:仅保留所有事件都符合条件的文档
即返回的文档中,events数组里没有任何元素的creationDate晚于2024-07-01,使用以下查询条件:
{ "events": { "$not": { "$elemMatch": { "creationDate": { "$gt": 1725072000000 } } } } }
场景2:返回所有文档,但过滤events数组中不符合条件的元素
即保留所有文档,仅移除events数组里creationDate晚于2024-07-01的元素,需使用投影语法(Azure Data Copy Tool支持投影功能):
{ "events": { "$filter": { "input": "$events", "as": "event", "cond": { "$lte": ["$$event.creationDate", 1725072000000] } } } }
关键注意事项
- 若
creationDate实际存储的是数字类型时间戳而非BSON Date,上述语法完全适用,无需修改。 - 在Azure Data Copy Tool中,直接将上述JSON对象粘贴到查询过滤框即可,不要添加
db.CollectionX.find()包裹。
内容的提问来源于stack exchange,提问作者Vilius Bikneris
相关产品推荐
相关产品推荐

