【发布时间】:2019-01-10 18:51:24
【问题描述】:
我在 dotnetcore 2.1 中使用 MongoDB.Driver nuget 包。我正在尝试返回集合中的文档列表,其中子文档字段等于我拥有的列表中包含的任何项目。理想情况下,我需要 dotnetcore 2.1 的 MongoDB.Driver nuget 包的 C# 语法。
文档
{
"_id" : "e29628a65e914c1e91b3fd9cbf6f2353",
"Enabled" : true,
"Name" : "Document123",
"DisplayName" : "Some Document",
"Description" : "Some Description",
"Data" : [
"lastname",
"email",
"firstname",
"zipcode"
],
"Items" : [
{
"_id" : "1",
"Name" : "bob"
},
{
"_id" : "2",
"Name" : "smith"
}
]
}
如果这是 SQL,这就是我想要做的:
SELECT *
FROM Document a, Item b
WHERE a.Id = b.DocumentId AND
b.Name IN ('bob', 'smith', 'alex')
以下是我们无法使用 MongoDB 驱动程序的内容:
string[] names = new [] { "bob", "smith", "alex" };
var document = new BsonDocument()
{
new BsonElement("Items.Name", new BsonDocument()
{
new BsonElement("$in", new BsonArray(names))
})
};
var itemsQuery = collection
.Aggregate()
.Match(document)
;
var items = itemsQuery.ToList();
提前致谢。
【问题讨论】:
-
stackoverflow.com/questions/3985214/… 的可能欺骗。在你的情况下使用
db.Document.aggregate([ {$match: {'Items.Name': {$in:['bob', 'smith', 'alex']}}}, {$project: { Items: {$filter: { input: '$Items', cond: {$in: ['$$this.Name', ['bob', 'smith', 'alex']]} }} }} ]) -
我评论中的查询对您不起作用吗?运行您拥有的 c# 查询时遇到什么问题?
-
是的,很遗憾,我们使用我们的驱动程序时它并不适合我们。我们必须展开,然后以这种方式基于子文档进行查询。
标签: mongodb c#-4.0 mongodb-query mongodb.driver