Mongo 投影不适用于子字段

时间:2021-06-11 09:08:27

标签: java mongodb projection morphia

我有一个类似这样的 json 对象。我想从响应中排除字段“placeOfBirth”。为此,我正在使用投影。但不知何故,它仅适用于字段而不适用于子字段。所以 placeofBirth 永远不会被排除,但 status 在响应中被删除。 这是我的代码

Projection projectionExclude = Projection.of().exclude("subObject.placeOfBirth").exclude("status");

 MorphiaCursor<T> cursor = datastore.aggregate(T.class)
            .match(Filters.eq("about", id))
            .project(projectionExclude).execute(T.class);

    if(cursor != null && cursor.hasNext()){
      result = cursor.toList().get(0);
    }

Json 数据

{
"about: " "testing/123",
"subObject" : [
  {
    "about" : "subobject/123",
   "placeOfBirth": {
         "birth": ["Lisbon"] 
                 }
  }
 ],
"status" : "approved"
}

如何才能做到这一点?还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

这实际上在 2.2 上对我有用。这是我正在运行的测试:

MongoCollection<Document> collection = getDocumentCollection(User.class);
collection.insertOne(parse("{'about': 'testing/123', 'subObject' : [ {'about' : 'subobject/123', 'placeOfBirth': {'birth': " +
                           "['Lisbon']}}],'status' : 'approved'}"));

Document next = getDs().aggregate(User.class)
                       .match(eq("about", "testing/123"))
                       .project(project()
                                    .exclude("subObject.placeOfBirth")
                                    .exclude("status"))
                       .execute(Document.class)
                       .next();

assertFalse(next.toJson().contains("placeOfBirth"));
assertFalse(next.toJson().contains("status"));
相关问题