簡體   English   中英

查詢 MongoDB C#:如何在 BsonDocument 中提取調用聚合方法產生的字段?

[英]Query MongoDB C#: how can I extract in a BsonDocument the field that results from calling aggregate method?

我有 2 個 collections“圖像”和“user_preff”。

在我的應用程序中:

  • “圖像”包含“文件名”和“數據”(字節數組)
  • “user_preff”包含“username”(喜歡該圖像的用戶)和“file_name”

我想做的是加入這個集合,我想展示用戶喜歡的圖像。

我正在使用這個:

var documents = collection.Aggregate().Match(filter).Lookup("images", "file_name", "file_name", "common").As<BsonDocument>().Match(new BsonDocument()).ToList();

現在在這個領域里,我想要的是共同的。 如何將該數據提取到另一個 BsonDocument 中?

您可以將二進制文件存儲為BinData ,並使用以下代碼讀取值。 如果需要,投影用於 select data並重命名字段。

string connectionString = "mongodb://localhost:27017";
var client = new MongoClient(connectionString);
var db = client.GetDatabase("test");
//var images = db.GetCollection<BsonDocument>("images");
var userPreff = db.GetCollection<BsonDocument>("user_preff");
//images.InsertOne(BsonDocument.Parse("{\"file_name\": \"bus.jpg\", \"data\": BinData(0, \"...\")}"));
//userPreff.InsertOne(BsonDocument.Parse("{\"username\": \"ntohl\", \"file_name\": \"bus.jpg\"}"));
var filter = Builders<BsonDocument>.Filter.Empty;
var documents = userPreff.Aggregate().Match(filter).Lookup("images", "file_name", "file_name", "common")
    .Project("{\"imagesOfUser\": \"$common.data\"}").ToCursor();
while (documents.MoveNext())
{
    foreach (BsonDocument bsonDocument in documents.Current)
    {
        foreach (var image in bsonDocument["imagesOfUser"].AsBsonArray)
        {
            byte[] bytes = image.AsBsonBinaryData.Bytes;
        }
    }
}

如果不需要重命名,您可以使用更簡單的投影:

var documents = userPreff.Aggregate().Match(filter).Lookup("images", "file_name", "file_name", "common")
    .Project("{\"_id\": 0, \"common.data\": 1}").ToCursor();
while (documents.MoveNext())
{
    foreach (BsonDocument bsonDocument in documents.Current)
    {
        foreach (var common in bsonDocument["common"].AsBsonArray)
        {
            byte[] bytes = common["data"].AsBsonBinaryData.Bytes;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM