我在处理聚合管道中的基本连接时遇到了一个解决方案。
解决方案的代码片段:
public Document getMovie(String movieId) {
if (!validIdValue(movieId)) {
return null;
}
List<Bson> pipeline = new ArrayList<>();
// match stage to find movie
Bson match = Aggregates.match(Filters.eq("_id", new ObjectId(movieId)));
pipeline.add(match);
// TODO> Ticket: Get Comments - implement the lookup stage that allows the comments to
// retrieved with Movies.
pipeline.addAll(Arrays.asList(new Document("$lookup",
new Document("from", "comments")
.append("let",
new Document("id", "$_id"))
.append("pipeline", Arrays.asList(new Document("$match",
new Document("$expr",
new Document("$eq", Arrays.asList("$movie_id", "$$id")))),
new Document("$sort",
new Document("date", -1L))))
.append("as", "comments"))));
Document movie = moviesCollection.aggregate(pipeline).first();
return movie;
}
我只是想知道-1L
在这种情况下的用途是什么?因为测试已经通过,只有-1
值。
我试着寻找它,但没有找到。
测试代码片段:
@SuppressWarnings("unchecked")
@Test
public void testGetMovieComments() {
String movieId = "573a13b5f29313caabd42c2f";
Document movieDocument = dao.getMovie(movieId);
Assert.assertNotNull("Should not return null. Check getMovie()", movieDocument);
List<Document> commentDocs = (List<Document>) movieDocument.get("comments");
int expectedSize = 147;
Assert.assertEquals(
"Comments list size does not match expected", expectedSize, commentDocs.size());
String expectedName = "Arya Stark";
Assert.assertEquals(
"Expected `name` field does match: check your " + "getMovie() comments sort order.",
expectedName,
commentDocs.get(1).getString("name"));
}
- 谢谢-谢谢
1条答案
按热度按时间iibxawm41#
这不就是一个简单的Java约定吗?
这个后缀告诉我们,类型可以表示的是什么。
由于这些值最终会被整理成一个对Mongo的请求,我不认为这在这个示例中会有什么不同,因为发送给Mongo的类型示例不会有什么不同。我相信你可以在MongoDriver代码中很容易地看到这一点。我可以链接它。