首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb上按对象的子集合项属性查询

mongodb上按对象的子集合项属性查询
EN

Stack Overflow用户
提问于 2017-11-06 05:53:36
回答 2查看 1.2K关注 0票数 0

我正在存储以下集合:

代码语言:javascript
复制
{
    "_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" : ""
        }
    ]

我需要根据父属性“名称”或问题集和属性“标题”进行查询。

因此,我构建了以下查询:

代码语言:javascript
复制
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编写查询的其他方法是什么。

EN

回答 2

Stack Overflow用户

发布于 2017-11-06 06:25:02

最后,我重写了对此的查询。

代码语言:javascript
复制
    var result =this.CoreService.QuestionCategoriesCollection().Find(c=>c.name.ToLower().Contains(filter.ToLower())
    || c.questions.Any(q=>q.caption.ToLower().Contains(filter.ToLower())));
票数 0
EN

Stack Overflow用户

发布于 2020-09-19 07:07:20

更干净但更原始的方式。给定以下集合模式示例:

代码语言:javascript
复制
public class Parent
{
    public IEnumerable<Child> Children { get; set; }
}

public class Child
{
    public string Id { get; set; }
}

通过子id获取父母的身份:

代码语言:javascript
复制
var dictionary = new Dictionary<string, object>
{
    "Children.Id" : "childId"
}
var data = this.ParentCollection().Find(new MongoDB.Driver.CommandDocument(dictionary));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47130567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档