尝试从我的 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();

这是正确的排序方法吗?

尝试从我的 Mongo 数据库中的所有文档中获取单个字段的列表

找到了解决方案。

//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();