У вас есть такой класс (я просто вместо guid использую GuidId.ToString ()):
public class Test
{
public Test()
{
TypeIds = new List<int>();
}
[BsonId]
public string Id { get; set; }
public string Country { get; set; }
public List<int> TypeIds { get; set; }
}
Я вставил строки в БД в соответствии с вышеуказанными документами
var collection = db.Database.GetCollection("items");
var id1 = Guid.NewGuid().ToString();
var id2 = Guid.NewGuid().ToString();
var test = new Test() { Id = id1, Country = "Germany" };
test.TypeIds.Add(47);
var test2 = new Test() { Id = id2, Country = "France" };
test2.TypeIds.Add(54);
test2.TypeIds.Add(47);
collection.Insert(test);
collection.Insert(test2);
Запросы:
//All documents that have TypeIds containing 47 or 54 - should result in 2 records
var array = new List<int>() { 47, 54 };
var condition1 = collection.FindAs<Test>(Query.In("TypeIds", BsonArray.Create(array))).ToList();
//All documents that have TypeIds containing 54 AND a Country of 'Germany' - should result in 0 records
var condition3 = collection.FindAs<Test>(Query.And(Query.EQ("TypeIds", 47), Query.EQ("Country", "Germany"))).ToList();
Обновление : я нашел способ выполнить второе условие:
//All documents that have TypeIds containing 47 AND 54 - should result in 1 records
var array2 = new List<int>() { 47, 54 };
var query = Query.All("TypeIds",BsonArray.Create(array2));
var condition2 = collection.FindAs<Test>(query).ToList();