下面是mongoDB聚合,它在mongoDB集合项中过滤测试数组。
db.getCollection('yourcollection')
.aggregate([
{"$match": {"tests.someField": {"$exists": true}}},
{ $project:{"tests": {"$filter": {"input": "$tests", "as": "item",
"cond": {"$ne": ["$$item.someField", undefined]}}}}
},
])
在使用java BasicDBObject时,将“undefined”
作为字符串,而不是JSundefined
BasicDBObject projectionFilterInput=new BasicDBObject("input","$tests")
.append("as", "item")
.append("cond",new BasicDBObject("$ne", Arrays.asList("$$item.someField","undefined")));
因此,这将解释“cond”:{“$NE”:[“$$item.vidaptorCode”,“undefined”]}}}
“undefined”而不是undefined
。因此,这将不会按照预期筛选项目。
mongodb java驱动程序库中是否有为这个特定的undefined
值定义的常量?这是主要的问题。
不管是谁好奇...
为什么我不使用ODM?
实际上,我们确实为MongoDB使用Spring数据,但它不支持这种聚合cond
。
MatchOperation matchStage = Aggregation.match(new Criteria("tests.someField").exists(true));
ProjectionOperation projection = Aggregation.project("tests");
Aggregation aggregation
= Aggregation.newAggregation(matchStage, projection);
AggregationResults<LabConfiguration> output
= mongoTemplate.aggregate(aggregation, "yourcollection", YourClass.class);
Projections filterProjection = projection(
"tests",
expression(
"$filter",
new BasicDBObject("input","$tests")
.append("as", "item")
.append("cond",new BasicDBObject("$ne", Arrays.asList("$$item.someField","undefined")))
)
);
正如其他人在我的操作中评论的那样,替代方法是使用$ifnull
。
实际上,我希望使用{extists:true}
但它不是有效的聚合cond
运算符,或者类似$IFNotNull
之类的东西会更好,不过它也可以通过$IFNull
来实现。
如您所知,投影使用0和1,即{name:1,_id:0}
所以,我决定在$ifnull
并且它工作时返回0
!
Java MongoDB核心驱动方式
BasicDBObject projectionFilterInput=new BasicDBObject("input","$tests")
.append("as", "item")
.append("cond",new BasicDBObject("$ifNull",Arrays.asList("$$item.someField",0)));
我的目标是使用聚合框架创建一个管道来对我的数据进行分组,然后将这个管道与java驱动程序一起使用。MongoDB v4.0.3 我使用MongoDB Compass创建了以下管道(减少到重要部分): 这导致以下(生成的)Java代码: 集合中$组阶段之前的数据如下所示: $组阶段应返回以下数据结构: 问题所在 Mongo Compass按预期预览了阶段的结果,但使用java驱动程序的阶段的结果非常
我目前正在开发一个在soapui中维护的测试套件。此测试套件还包含一些web功能测试,这些测试以和
我试图弄清楚,在使用Tableau连接器SDK创建自定义JDBC连接器时,如何让Tableau识别我的JDBC驱动程序。当前,当Tableau加载我的自定义连接器时,我可以告诉驱动程序找不到,因为连接器中显示了一个链接,该链接显示: > 在图表日志中,我可以看到。包含我的驱动程序的jar文件通过搜索它们的名称来识别,它们显示在日志中。 日志环境部分摘录: 未识别的驱动程序屏幕截图显示下载驱动程序
问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0日志= / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sync_
问题内容: 我正在尝试禁用Chrome控制台的输出。如果我通过–start-maximized选项,则可以正常工作。我可能输入了错误的命令? 我也试过 输出量 已启动的ChromeDriver端口= 26703版本= 23.0.1240.0 log = / Brett / workspace / TestNG / chromedriver.log [1214/161331:ERROR:ipc_sy
我试图在我的angular2应用程序中使用ng2上传器,我试图在我的视图中添加一个按钮点击上传操作,我试图像文档一样解释 component.ts component.html 但我在导航器中遇到了以下错误: 错误:ReferenceError:UPLOAD_指令未定义(…)ZoneDelegate。调用@angular2 polyfills。js:332Zone。运行@angular2 poly