用spring mongodb创建一个带有差异的ProjectionOperation

时间:2017-10-17 09:14:03

标签: java spring mongodb

我有一个投影,我必须转换为java并且我得不到正确的结果,就像在使用javascript的mongo db执行器中一样。

{
        $project: {"userId": 1, "followingAndNotFollowingBack": {
            $setDifference: ["$following", "$follower"]}}
}

直到现在我在Java中有以下内容:

private static final ProjectionOperation PROJECTION_OPERATION = Aggregation.project(UserRelationships.FIELD_USER_ID)
            .and(SetOperators.SetDifference.arrayAsSet(UserRelationships.FIELD_FOLLOWING_USER_IDS)
                    .differenceTo(UserRelationships.FIELD_FOLLOWER_USER_IDS))
            .as(FOLLOWING_AND_NOT_FOLLOWED_BACK);

但每次null我都会得到
有没有人看到这个问题?

非常感谢

2 个答案:

答案 0 :(得分:1)

请尝试以下方法。我使用过differenceToArray

private static final ProjectionOperation PROJECTION_OPERATION = Aggregation.project(UserRelationships.FIELD_USER_ID)
            .and(UserRelationships.FIELD_FOLLOWING_USER_IDS)
                    .differenceToArray(UserRelationships.FIELD_FOLLOWER_USER_IDS)
            .as(FOLLOWING_AND_NOT_FOLLOWED_BACK);

另一个例子: -

db.experiments.aggregate(
   [
     { $project: { A: 1, B: 1, inBOnly: { $setDifference: [ "$B", "$A" ] }, _id: 0 } }
   ]
)

<强>代码: -

Aggregation aggregate = Aggregation.newAggregation(
            Aggregation.project("A", "B").and("B").differenceToArray("A").as("inBOnly").andExclude("_id"));

答案 1 :(得分:0)

感谢您的帮助,但问题是,我在测试和生活中有不同的mongodbs 所以带有null的differencetoarray在一个版本中是null,而在另一个版本中它给了我正确的答案,所以我必须添加信息以便全部返回,如果我与null数组结合。