응용 프로그램을 실행할 때 사용 된 원시 쿼리를 작성해야합니다. 내가 github에 여기에 크레이그의 답변을 재 게시 것 같은 질문을 가진 사람들을위한Fluent-mongo 실행시 "실제"mongo 쿼리를 얻는 방법
db.EventsReceiver.find({ "userid" : "123" });
응용 프로그램을 실행할 때 사용 된 원시 쿼리를 작성해야합니다. 내가 github에 여기에 크레이그의 답변을 재 게시 것 같은 질문을 가진 사람들을위한Fluent-mongo 실행시 "실제"mongo 쿼리를 얻는 방법
db.EventsReceiver.find({ "userid" : "123" });
: 유사
IQueryable alldata = hr.GetCollection"EventsReceiver").AsQueryable().Where(q => q.UserId == "123");
뭔가 :
이에서 얻을 수있는 가능한 모든 방법/확장 방법이다 :var queryObject = ((IMongoQueryable)alldata).GetQueryObject();
이렇게하면 쿼리 생성에 사용 된 개체가 다시 제공됩니다.
FluentMongo v1.2.0.0부터 공개적으로 쿼리를 노출 할 방법이 없습니다 (너무 슬프다). 여기에 더러운 확장 방법이 있습니다.
비공개 회원에게 다가 가기 위해 리플렉션을 사용하고 있기 때문에 앞으로는 반드시 작동 할 것으로 기대하지 않습니다.
public static class MongoQueryableExtensions
{
public static BsonDocument GetMongoQuery<T>(this IQueryable<T> query)
{
if(query == null) throw new ArgumentNullException("query");
Assembly fluentMongoAssembly = typeof(FluentMongo.Linq.MongoCollectionExtensions).Assembly;
Type mongoQueryableType = fluentMongoAssembly.GetType("FluentMongo.Linq.IMongoQueryable");
BsonDocument queryDocument = null;
if(mongoQueryableType.IsAssignableFrom(query.GetType()))
{
MethodInfo m = mongoQueryableType.GetMethod("GetQueryObject");
object queryObject = m.Invoke(query, null);
PropertyInfo queryProperty = fluentMongoAssembly.GetType("FluentMongo.Linq.MongoQueryObject").GetProperty("Query");
queryDocument = (BsonDocument)queryProperty.GetValue(queryObject, null);
}
return queryDocument;
}
}
확인이는 방법이 아니다? http://stackoverflow.com/questions/10261156/translate-queryablet-back-to-imongoquery?lq=1 –
http://stackoverflow.com/questions/10261156/translate-queryablet-back-to-imongoquery?lq=1 –