,如何排除删除的记录
问题描述:
我想只有那些在一个嵌入式document.For例如 我收集老乡,如何排除删除的记录
{
"users":[
{
"email":"[email protected]"
"messages":[
{
"text":"some message",
"isDeleted":"false"
},{
"text":"some message",
"isDeleted":"false"
},{
"text":"some message",
"isDeleted":"false"
},{
"text":"some message",
"isDeleted":"true"
},{
"text":"some message",
"isDeleted":"false"
}
]
}
]
}
所以删除未标明消息结果应该为4级的消息不5.
我想这
Query query = new Query();
query.addCriteria(Criteria.where("messages.isDeleted").is(false));
User user = mongoTemplate.findOne(query,User.class);
但正如我的查询返回的用户,这将无法工作,当我得到我们它的消息包含所有消息。
答
你需要使用$unwind
运营商放松消息数组,然后使用$match
操作
DBObject unwind = new BasicDBObject("$unwind", "$messages");
DBObject match = new BasicDBObject("$match", new BasicDBObject("messages.isDeleted", false));
AggregationOutput output = mongoTemplate.getCollection("user").aggregate(unwind, match);
List<Message> messages = new ArrayList<Message>();
Iterator<DBObject> iterator = output.results().iterator();
while(iterator.hasNext()) {
DBObject obj = (DBObject) iterator.next();
Message message = emrDataStore.getConverter().read(Message.class, (DBObject)obj.get("messages"));
messages.add(message);
}
的List<Message> messages
将持有的结果应用的条件 - 消息,这些消息不会被删除