我正在尝试使用Sample()方法从数据库中获取一些随机项。我更新到驱动程序的最新版本并复制了链接示例中的using语句。但是,有些东西不起作用,我希望这是我的一些简单错误。所有相关信息如下图所示:
编辑:
Greg,我读了聚合文档here和原始db方法doc here,但我仍然没有得到它。最后两行是我的尝试,我之前从未使用过聚合:
var mongoCollection = GetMongoCollection<BsonDocument>(collectionName);
long[] locationIds = new long[] { 1, 2, 3, 4, 5 };
var locationsArray = new BsonArray();
foreach (long l in locationIds) { locationsArray.Add(l); };
FilterDefinition<BsonDocument> sampleFilter = Builders<BsonDocument>.Filter.In("LocationId", locationsArray);
var findSomething = mongoCollection.Find(sampleFilter); //this works, the two attempts below don't.
var aggregateSomething = mongoCollection.Aggregate(sampleFilter).Sample(25);
var aggregateSomething2 = mongoCollection.Aggregate().Match(sampleFilter).Sample(25);
答案 0 :(得分:4)
样本仅可从聚合中获得。您需要从Aggregate开始,而不是Find。我相信它也可以在Linq中使用。
更新: 看起来我们没有具体的方法。但是,您可以使用AppendStage方法。
mongoCollection.Aggregate(sampleFilter)
.AppendStage<BsonDocument>("{ $sample: { size: 3 } }");