Как сделать запрос внутри массива в MongoDB Collection с помощью C #? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь перейти в коллекцию MongoDB вида:

{"_id":"lkashfhasdfhsdlafhlkjsdahf",
"
"Array":[{

                    "array_1":"17:00"}],

}

Я хочу получить массив_1 в приведенном выше документе. Я попробовал его, используя следующий код в C #

result = Database.CollectionName.AsQueryable().Where(r => r.Array.array== array_inpit(Input) && condition2).ToList();

Ожидаемый результат: Все документы с соответствующим массивом

Токовый выход: ошибка

Любая помощь, как мне поступить с этим.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Я создаю простые классы и демонстрирую, как:

Класс MongoDB

public class MongoDBConnect : IDisposable
{
    public IMongoClient client;
    public IMongoDatabase database;

    public MongoDBConnect()
    {
        client = new MongoClient("mongodb://localhost");
        database = client.GetDatabase("dbo");
    }

    public void Dispose()
    {
        GC.WaitForPendingFinalizers();
        GC.Collect();
    }
}

Класс вашей коллекции

public class YourCollection
{
    [BsonId()]        
    public ObjectId Id { get; set; }

    [BsonElement("YourCollectionID")]
    public string YourCollectionID { get; set; }

    [BsonElement("AccessKey")]
    public string AccessKey { get; set; }
}

Класс данных вашей коллекции

public class YourCollectionDAO : MongoDBConnect
{
    public YourCollectionDAO()
    {

    }

    public YourCollection Find(string yourCollectionID)
    {
        var collection = this.database.GetCollection<User>("YourCollection");

        Expression<Func<YourCollection, bool>> filter = x => x.yourCollectionID == yourCollectionID;

        IList<YourCollection> filtering = collection.Find(filter).ToList();

        var yourCollectionItem = filtering.Where(x => x.yourCollectionID == yourCollectionID).FirstOrDefault();

        return yourCollectionItem;
    }
}

Надеюсь, это поможет.

0 голосов
/ 01 апреля 2019

Базовый пример использования пакета MongoDb.Driver .Вам понадобятся определенные типы данных, например:

// Use [BsonIgnoreExtraElements] attribute when not defining ALL fields in record
internal class MainRecord
{
    public ObjectId _id { get; set; }

    public List<ArrayItem> ResourceStatus { get; set; }

    // All the other fields here
}

// [BsonIgnoreExtraElements] as above
internal class ArrayItem
{
    public string E2EId { get; set; }
}

(Примечание. Я пропустил все поля, необязательные для поиска по массиву).

Затем для фактического запросаданные:

var client = new MongoClient();

IMongoDatabase db = client.GetDatabase("database-name-here");

var collectionName = "collection-name-here";

IMongoCollection<MainRecord> collection = db.GetCollection<MainRecord>(collectionName);

var filter = Builders<MainRecord>.Filter.ElemMatch(x => x.ResourceStatus, x => x.E2EId == "1fdsfsfsfsfsffds0");

var result = collection.Find(filter);

РЕДАКТИРОВАТЬ: И я бы рекомендовал посмотреть этот пост , который дает несколько альтернативных подходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...