2017-06-30 66 views
0

此问题涉及使用C#在Mongo DB中获取嵌套文档的不同值。我的文档的集合,每个文档具有结构:使用C#从MongoDB中的集合获取不同的嵌套文档值

{ 
    key1: value1, 
    key2: value2, 
    key3: { 
     nestedKey1: nestedValue1, 
     nestedKey1: nestedValue1 
    } 
} 

我需要查询基于key1的的值不同nestedKey1值的列表。我可以做到这一点通过使用命令(使用Robomongo壳):

db.runCommand({distinct:'collection_name', key:'key3.nestedKey1', query: {key1: 'some_value'}}) 

但我怎么在C#(tutorial here

+1

[C#的MongoDB DISTINCT查询语法](的可能的复制https://stackoverflow.com/questions/35725113/c -sharp-mongodb-distinct-query-syntax) – Veeram

+0

@Veeram在这种情况下,我如何指定密钥key3.nestedKey1?并且不要忘记必须是key1的过滤器:'some_value' –

回答

1

你可以试试下面的不同的查询实现这一目标。

IMongoClient mongo = new MongoClient(); 
IMongoDatabase db = mongo.GetDatabase("databasename"); 
IMongoCollection<BsonDocument> collection = db.GetCollection<BsonDocument>("collectionname"); 

BsonDocument filter = new BsonDocument("key1", "some_value"); 
IList<BsonDocument> distinct = collection.Distinct<BsonDocument>("key3.nestedKey1", filter).ToList<BsonDocument>(); 

过滤生成器变

var builder = Builders<YourClass>.Filter; 
var filter = builder.Eq(item => item.key1, "some_value"); 
IList<string> distinct = collection.Distinct<string>("key3.nestedKey1", filter).ToList<string>(); 

字段生成器变

var builder = Builders<YourClass>.Filter; 
var filter = builder.Eq(item => item.key1, "some_value"); 
FieldDefinition<YourClass, string> field = "key3.nestedKey1"; 
IList<string> distinct = collection.Distinct<string>(field", filter).ToList<string>(); 
+0

我找到了解决方案。这与你的答案非常相似。谢谢 –

相关问题