小编vir*_*ren的帖子

如何在Mongo聚合中合并文档中的数组字段

我有一个要求,我需要在两个记录上进行聚合,两个记录都有一个具有不同值的数组字段.我需要的是当我对这些记录进行聚合时,结果应该有一个数组,其中包含来自不同数组的唯一值.这是一个例子:

第一记录

 { Host:"abc.com" ArtId:"123", tags:[ "tag1", "tag2" ] }
Run Code Online (Sandbox Code Playgroud)

第二个记录

{ Host:"abc.com" ArtId:"123", tags:[ "tag2", "tag3" ] }
Run Code Online (Sandbox Code Playgroud)

在主机和artid上聚合后,我需要这样的结果:

 { Host: "abc.com", ArtId: "123", count :"2", tags:[ "tag1", "tag2", "tag3" ]}
Run Code Online (Sandbox Code Playgroud)

$addToset在小组声明中试过,但它给了我这样的标签:[["tag1","tag2"],["tag2","tag3"]]

你能帮我解决一下如何在聚合中实现这个目标吗?

mongodb mongodb-query aggregation-framework

11
推荐指数
1
解决办法
9820
查看次数

为什么在runnable接口中运行使用abstract关键字定义的方法

这个问题可能很愚蠢,但我不小心检查了java源代码,runnable接口中的run方法是用abstract关键字定义的.但是根据接口定义,接口中的所有方法都是默认的抽象.然后我很困惑为什么特殊的Runnable接口有run方法的抽象关键字.我检查其他界面,如地图,列表等,但没有人有抽象的关键字.

请给我一个想法,为什么在java源代码中这样写.

public abstract void run();
Run Code Online (Sandbox Code Playgroud)

谢谢

java

8
推荐指数
2
解决办法
3489
查看次数

本地jar不包含在类路径中(`<scope> system </ scope>`)

我正在尝试使用maven和eclipse构建我的应用程序.我依赖于我本地机器上的第三方罐子.这是我的pom.xml

<dependency>
    <groupId>sourceforge.net</groupId>
   <artifactId>zipdiff</artifactId>
   <version>0.4</version>
   <scope>system</scope>
   <systemPath>C:/gelcap/lib/zipdiff-0.4.jar</systemPath>
</dependency>

<dependency>
    <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

当我运行mvn:install时会为我的项目创建war文件.但问题是它不包括zipdiff.jar文件到web-inf/lib文件夹,它只包含下载的文件.我需要包括从我的本地系统复制文件,但maven忽略它们.我没有想到为什么maven没有包含系统范围的文件到我的war文件.请告诉我如何解决这个问题.提前致谢

java maven-2

5
推荐指数
2
解决办法
6876
查看次数

在hazelcast 和Java 中以编程方式设置Near Cache 验证Near 缓存是否从本地缓存返回数据

我创建了一个 Hazelcast 设置,其中一个节点运行着 hazelcast 实例。我的客户端应用程序正在使用客户端配置从 Hazelcast 实例读取缓存。我想在我的客户端应用程序中实现 Near 缓存以将其用作本地缓存。你能给我一个例子,让我看看它是如何在java中使用的。我目前的代码是这样的

Hazel 铸造缓存节点

public class HazelCastNode1 {

    public static void main(String[] args) {
        Config cfg = new Config();
        HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
        Map<Integer, String> citiesMap = instance.getMap("Cities");

        for(int i = 0; i < 100000; i++){
            citiesMap.put(i, "Vienna"+i);
        }
        System.out.println("Map Size:" + citiesMap.size()); 
    }
}
Run Code Online (Sandbox Code Playgroud)

客户代码

public class ReadClient {
    public static void main(String[] args) {
        ClientConfig clientConfig = new ClientConfig();
        HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);
        IMap<Integer, String> cumap = client.getMap("Cities");
        System.out.println(cumap.size());
    }  
} …
Run Code Online (Sandbox Code Playgroud)

java distributed-caching hazelcast

4
推荐指数
1
解决办法
4882
查看次数

在单个调用形式 Jedis 中获取多个键值

我正在尝试将键列表传递给 jedis 并获取它们的值作为回报。
mget 操作执行此操作,但它不返回键值对,它以列表形式给出所有值。
有什么办法我们可以知道这个查询中的键值对。或者确认列表中返回的值与键的顺序相同。

List<String> lt =jedis.mget(mapArray);
            int j = 0;
            for( String key : mapArray) {
                System.out.println(key+" : "+lt.get(j));
                j++;
            }
Run Code Online (Sandbox Code Playgroud)

谢谢

java redis jedis

4
推荐指数
1
解决办法
9795
查看次数