尝试从我的 Mongo 数据库中的所有文档中获取单个字段的列表
本文关键字:获取 文档 单个 字段 列表 Mongo 我的 数据库 | 更新日期: 2023-09-27 17:55:11
我正在使用最后一个驱动程序。 我的文件是以下形式
{
"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["ItemID"]。AsInt32,但后来我收到一个无效操作异常,错误
将子表达式从类型"System.Int32"重写为类型 不允许使用"MongoDB.Bson.BsonValue",因为它会更改 操作的含义。如果这是故意的,请覆盖 "访问一元"并更改它以允许此重写。
我希望它们作为整数,以便我可以向查询添加排序。 我的排序如下:
var s = Builders<BsonDocument>.Sort.Ascending(x => x);
var found= collection.Find(f).Project<BsonDocument>(p).Sort(s).ToList().ToArray();
这是正确的排序方法吗?
找到了解决方案。
//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();