我正在存储以下集合:
{
"_id" : ObjectId("59ffdb0c70a6560df428aaa3"),
"name" : "Contact Information",
"description" : "Basic contact information about myself",
"questions" : [
{
"caption" : "First Name",
"value" : ""
},
{
"caption" : "Last Name",
"value" : ""
},
{
"caption" : "Email",
"value" : ""
},
{
"caption" : "Date of bith (mm/dd/yyyy)",
"value" : ""
},
{
"caption" : "Street Address",
"value" : ""
},
{
"caption" : "Address Line 2",
"value" : ""
},
{
"caption" : "State",
"value" : ""
},
{
"caption" : null,
"value" : null
},
{
"caption" : "Postal Code",
"value" : ""
},
{
"caption" : "Country",
"value" : ""
}
]我需要根据父属性“名称”或问题集和属性“标题”进行查询。
因此,我构建了以下查询:
var result =(from Query in this.CoreService.QuestionCategoriesCollection().AsQueryable()
from Questions in Query.questions
where Questions.caption.ToLower().Contains(filter.ToLower())
select Query).ToList();但是,当查询运行时,我会收到以下异常:
异常已发生:CLR/System.NotSupportdException--“System.NotSupportedException”类型的异常发生在MongoDB.Driver.dll中,但未在用户代码中处理:'$project或$group不支持{document}‘。(在MongoDB.Driver.Linq.Translators.AggregateLanguageTranslator.TranslateValue(Expression节点)在MongoDB.Driver.Linq.Translators.AggregateLanguageTranslator.TranslateMapping(ProjectionMapping映射)在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateProjectValue(Expression选择器(在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateSelectMany(SelectManyExpression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateSelect(SelectExpression节点)(在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression节点,MongoDB.Driver.IAsyncCursorSourceExtensions.ToListTDocument at projectname.Services.Questions.GetQuestions(String filter) ( c:\developerment\project\project\Service\Questions.cs:line 24 at projectnameAPI.Controllers.QuestionsController.Get(String filter) ) c:\developerment\project\project\Controllers\QuestionsController.cs:line 31 at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target,( Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()的Object[]参数)
我不知道用linq编写查询的其他方法是什么。
发布于 2017-11-06 06:25:02
最后,我重写了对此的查询。
var result =this.CoreService.QuestionCategoriesCollection().Find(c=>c.name.ToLower().Contains(filter.ToLower())
|| c.questions.Any(q=>q.caption.ToLower().Contains(filter.ToLower())));发布于 2020-09-19 07:07:20
更干净但更原始的方式。给定以下集合模式示例:
public class Parent
{
public IEnumerable<Child> Children { get; set; }
}
public class Child
{
public string Id { get; set; }
}通过子id获取父母的身份:
var dictionary = new Dictionary<string, object>
{
"Children.Id" : "childId"
}
var data = this.ParentCollection().Find(new MongoDB.Driver.CommandDocument(dictionary));https://stackoverflow.com/questions/47130567
复制相似问题