Недавно я начал использовать MongoDB в качестве источника в SSIS (используя драйвер C#). Я очень новичок в MongoDB и C#. Когда у меня не было вложенных документов, заявления, как ниже работал для меня:
var query = Query.And(Query.Or(Query.GT("CreatedOn",maxUpdatedOnBSON), Query.GT("UpdatedOn", maxUpdatedOnBSON)),
Query.Or(Query.LT("CreatedOn", cutoffDate), Query.LT("UpdatedOn", cutoffDate)),Query.In("TestType", testTypes));
MongoCursor<BsonDocument> toReturn = collection.Find(query);
Теперь я получил вложенные документы. Я был в состоянии создать Java-скрипт, и он работает с самого MongoDB
db.Test.aggregate([
{ $unwind : { path: "$Items",includeArrayIndex: "arrayIndex"} } ,
{ $match: { $and: [
{$or: [ { CreatedOn: { $gt: ISODate("2015-11-22T00:00:00Z")} }, {UpdatedOn: { $gt: ISODate("2015-11-22T00:00:00Z") } } ] },
{$or: [ { CreatedOn: { $lt: ISODate("2016-05-09T00:00:00Z")} }, {UpdatedOn: { $lt: ISODate("2016-05-09T00:00:00Z") } } ] }
] }
}])
В C#, как я понимаю, я должен использовать агрегат вместо найти, но я не могу перевести этот код на C#. У меня все еще есть критерии отбора и расслабляются.
Не могли бы вы помочь?
Я надеюсь. Попробуем этот подход, спасибо. Речь идет о синтаксисе MongoCursor. MongoCursor toReturn = коллекция.?; –
ICHV
Хорошо, если вы хотите, чтобы курсор на агрегации, вам нужно aggregateargs или передать aggregateoptions в aggregate consturctor. или отредактированный ответ выше. Вы не можете вытащить MongoCursor. вы можете получить IAsyncCursor вместо этого, как этот var aggCursor = grades.Aggregate() .Unwind (x => x ["Items"]) .Match (filter) .ToCursor(); – KaSh
Посмотрите эту ссылку для получения более подробной информации о asynccursor http://stackoverflow.com/questions/29682371/how-is-an-iasynccursor-used-for-iteration-with-the-mongodb-c-sharp-driver? RQ = 1 – KaSh