2

如果我有一个充满以下元素的集合

@Entity
public void MyEntity{
  public String name;
  public String type;
  ...
}

我想返回一个List<String>(或Set)不是元素,而只返回它们的name字段。

List<String> allNames = datasotre.find(MyEntity.class).asList("name");

这是示例查询,没有 Morphia 数据存储的这种方法。

4

3 回答 3

5

To limit the fields returned call the "retrievedFields" method on Query. For example, to only get the name field of all MyEntity objects:

datastore.find(MyEntity.class).retrievedFields( true, "name").asList()

Edit - You can get a list Strings using the following query as long as you don't mind that the list will only contain unique values (i.e. no duplicate names):

DBCollection m = datastore.getCollection( MyEntity.class );
List names = m.distinct( "name", new BasicDBObject() );

The "names" list will only contain Strings.

于 2012-08-14T13:19:36.560 回答
1

这里的问题是没有对“键”的实际查询。查询都返回“键/值对”。

理论上,其中的字段datastore.find()应该映射到其中的字段,MyEntity这样您就可以使用反射。但是,如果您有其他人从不同的地方写入数据库,他们可能已经播种了额外的表。

如果是这种情况,您将需要运行 Map/Reduce 以获取所有“键”名称的列表。

这里有一个样本

于 2012-08-14T17:00:30.953 回答
0

您正在寻找datastore.find(MyEntity.class).retrievedFields(true, "name").asList();. 这将包含 _id 和 name 属性。

请参阅http://code.google.com/p/morphia/wiki/Query#Ignoring_Fields

于 2012-08-14T13:18:21.573 回答