[英]How to check if key exists in BsonDocument or not using Mongodb C# driver?
[英]Selecting a BsonDocument with its array containing only last N elements using mongodb C# driver
我在MongoDB中有一个像这样的BsonDocuments的集合
messages: [
{
time: "0001-01-01T00:00:00Z",
room: "ROOM2",
receiver: "xxxxxxxxx@xxx.xxx",
receiverName: "xxxxxxxxx",
sender: "xxxxxxxxx@xxx.xxx",
senderName: "xxxxxxxxx",
message_text: "jl,hrdls"
},
{
time: "0001-01-01T00:00:00Z",
room: "ROOM2",
receiver: "xxxxxxxxx@xxx.xxx",
receiverName: "xxxxxxxxx",
sender: "xxxxxxxxx@xxx.xxx",
senderName: "xxxxxxxxx",
message_text: "hello world"
},
{
time: "0001-01-01T00:00:00Z",
room: "ROOM2",
receiver: "xxxxxxxxx@xxx.xxx",
receiverName: "XXXXXXXXX",
sender: "XXXXXXXX@xxx.xxx",
senderName: "XXXXX",
message_text: "hello world"
}
],
_id: 4,
email1: "xxxx@XXX.xxx",
email2: "xxxxxx@xxx.xxx"
现在为MongoDB使用C#驱动程序,我要选择这些文档,以使'messages'数组仅包含最后两个元素...我找不到任何解决方案...有人可以建议一种方法吗?
如果您对解决方法感到满意:
从您的Mongo集合中选择正确的文档并放入列表后-此处命名为result
var filter = Builders<Entity>.Filter.Eq("email1", "email@one.net");
List<Entity> result = await msgs.Find(filter).ToListAsync();
您可以遍历结果并仅保留前两个消息条目:
foreach (Entity item in result)
{
item.messages = item.messages.OrderByDescending(p => p.time).Take(2).ToList();
}
其中Entity是代表模型的类型。 就像是:
class Entity
{
public BsonObjectId _id { get; set; }
public string email1 { get; set; }
public string email2 { get; set; }
public List<Message> messages { get; set; }
public Entity()
{
messages = new List<Message>();
}
}
class Message
{
public DateTime time { get; set; }
public string room { get; set; }
//...
public string message_text { get; set; }
}
您需要进行这样的投影,以仅包含所需的字段:
var query = collection.Find(filter). // your filter
Project<Document>(
Builders<Document>.Projection
.Include("messages.senderName")
.Include("messages.message_text")
.Include("email1")
.Include("email2")
);
为此,我认为您需要使用[BsonElement(“ messages”)]属性声明您的实体。
请让我知道是否可行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.