【问题标题】:mongoose, trying to find one object by a value猫鼬,试图通过一个值找到一个对象
【发布时间】:2019-01-15 11:34:51
【问题描述】:

我在这里尝试完成的是通过一个值找到一个对象,然后将该对象添加到另一个对象属性。

代码

q = { _id:Schema.Types.ObjectId, 类别:问题类别, 问题:字符串, 名称:字符串, };

QuestionCategory.findOne().sort({ category: "ExampleCategory" }).exec((err, doc) => {
    if(err)
    {
        return err
    }
    q.category = doc;
})

错误:

throw new TypeError('Invalid sort value: {' + field + ': ' + value + ' }');
    ^

TypeError: Invalid sort value: {category: ExampleCategory }

我也尝试过不使用 .sort 并在 findOne 中编写过滤器,但也没有用

架构

const QuestionCategorySchema= new Schema({
    _id: Schema.Types.ObjectId,
    category: String,
    icon: String,
    order: Number
}, { collection: 'QuestionCategory' });

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    如果您尝试使用类别字段 ExampleCategory 查询文档,则需要进行查找查询而不是排序查询 并且当您使用 findOne 时也不需要对数据进行排序,因为它只得到一个 QuestionCategory QuestionCategory.findOne({category:"ExampleCategory"}).exec(err, doc)=>{})

    【讨论】:

    • 嗨!感谢您的回答,当我这样做时,我得到了这个错误。 CastError: Cast to Embedded 路径“category”中的值“ExampleCategory”失败
    • 是否为此 QuestionCategory 集合定义了架构?
    • 如果您要获取类别值为“ExampleCategory”的文档,上述查询应该可以工作,可能是您的 mongo 连接器有问题,请尝试在 mongo shell 中使用它
    【解决方案2】:

    第一件事你不能使用sort()这样sort({ category: "ExampleCategory" }),你需要排序像 .sort({ category: -1 }).sort({ category: 1 }),另一件事我们不能在执行顶部从数据库中获取单个记录时使用 sort()(例如findOne())。 sort() 主要用于分别对您的数据进行排序。顺便说一句,您可以通过以下查询获得所需的结果:

    QuestionCategory.find({}).sort({ _id: -1 }).limit(1)

    【讨论】:

    • 我想找到具有与我输入的字符串匹配的属性类别的 QuestionCategory,该查询是否适用?
    • 那么查询将是:QuestionCategory.find({ "key": "value" }).sort({ _id: -1 }).limit(1)
    猜你喜欢
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2013-01-13
    • 2016-03-31
    • 2018-09-07
    相关资源
    最近更新 更多