我使用的是最后一个驱动程序。我的文件格式为
{
"ItemID": 292823,
....
}
第一个问题:我试图获取所有ItemID的列表,然后对它们进行排序。但是,我的搜索只是拉回所有_id,而没有任何ItemID。我做错了什么?
var f = Builders<BsonDocument>.Filter.Empty;
var p = Builders<BsonDocument>.Projection.Include(x => x["ItemID"]);
var found= collection.Find(f).Project<BsonDocument>(p).ToList().ToArray();
当我尝试查询输出时,我得到以下内容。
found[0].ToJson()
"{ \"_id\" : ObjectId(\"56fc4bd9ea834d0e2c23a4f7\") }"
它缺少ItemID,只有mongo id。
解决方案:我搞砸了案子。它是itemID,而不是ItemID。我仍然在排序方面遇到麻烦。
第二个问题:我尝试将第二行更改为x [&#34; ItemID&#34;]。AsInt32,但后来出现错误的InvalidOperationException
从“System.Int32&#39;”类型中重写子表达式。输入 &#39; MongoDB.Bson.BsonValue&#39;是不允许的,因为它会改变 操作的意义。如果这是故意的,请覆盖 &#39; VisitUnary&#39;并将其更改为允许重写。
我希望它们为int,以便我可以为查询添加排序。我的排序如下:
var s = Builders<BsonDocument>.Sort.Ascending(x => x);
var found= collection.Find(f).Project<BsonDocument>(p).Sort(s).ToList().ToArray();
这是对它进行排序的正确方法吗?
答案 0 :(得分:3)
找到了解决方案。
//Get all documents
var f = Builders<BsonDocument>.Filter.Empty;
//Just pull itemID
var p = Builders<BsonDocument>.Projection.Include(x => x["itemID"]);
//Sort ascending by itemID
var s = Builders<BsonDocument>.Sort.Ascending("itemID");
//Apply the builders, and then use the Select method to pull up the itemID's as ints
var found = collection.Find(f)
.Project<BsonDocument>(p)
.Sort(s)
.ToList()
.Select(x=>x["itemID"].AsInt32)
.ToArray();