首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >引用猫鼬模式objectId的更好方法是什么?

引用猫鼬模式objectId的更好方法是什么?
EN

Stack Overflow用户
提问于 2018-12-28 21:25:56
回答 1查看 50关注 0票数 1

假设我有以下模型:

代码语言:javascript
运行
复制
var author = mongoose.Schema({
name: {
    type: String,
    required: true
},
isEnabled: {
    type: Boolean,
    required: true
}
})

var book = mongoose.Schema({
    name: {
    type: String,
    required: true
},
value: {
    type: Number,
    required: true
}
authorId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'author'
required: true
},
isEnabled: {
    type: Boolean,
    required: true
}
})

当我试图做出类似的聚合时,如下所示:

代码语言:javascript
运行
复制
books.aggregate([{$match: { authorId: '599b3b54b8ffff5d1cd323d8'}, { $group: {_id: '$name', total: {$sum: '$value'} } } }])

由于猫鼬没有将authorId转换为ObjectId,所以我没有得到任何注册表,所以在将它插入过滤器之前,我能够将它转换为ObjectId,但它似乎不是一个很好的实现,因为我必须在猫鼬中给出一个要求。

我用不同的方式实现它,将authorId改为String,它运行得很好吗?我的问题是是否有更好的方法来实现它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-28 21:58:44

在mongo4.0及以上版本中,您可以使用$convert更改数据类型,或者简单地使用$toObjectId

使用字符串objectId查找查找ObjectId

代码语言:javascript
运行
复制
db.t10.find({$expr : {$eq : ["$_id" , {$convert : {input : "5c269af53f6a8103d9cda006", to : "objectId"}}]}})

聚合

代码语言:javascript
运行
复制
db.t10.aggregate([
    {$match : {$expr : {$eq : ["$_id" , {$convert : {input : "5c269af53f6a8103d9cda006", to : "objectId"}}]}}}
])

样本收集

代码语言:javascript
运行
复制
> db.t10.find()
{ "_id" : ObjectId("5c269af53f6a8103d9cda006") }

总产出

代码语言:javascript
运行
复制
> db.t10.aggregate([{$match : {$expr : {$eq : ["$_id" , {$convert : {input : "5c269af53f6a8103d9cda006", to : "objectId"}}]}}}])
{ "_id" : ObjectId("5c269af53f6a8103d9cda006") }

查找输出

代码语言:javascript
运行
复制
> db.t10.find({$expr : {$eq : ["$_id" , {$convert : {input : "5c269af53f6a8103d9cda006", to : "objectId"}}]}})
{ "_id" : ObjectId("5c269af53f6a8103d9cda006") }
>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53964442

复制
相关文章

相似问题

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