如何动态构建具有 objectId 的 mongoose 查询?

Posted

技术标签:

【中文标题】如何动态构建具有 objectId 的 mongoose 查询?【英文标题】:How can I dynamically build a mongoose query that has an objectId? 【发布时间】:2019-11-24 08:17:38 【问题描述】:

我正在尝试动态构建一个猫鼬查询。我遇到的问题是,当查询包含 objectId 时,我无法弄清楚如何执行此操作。

我正在使用猫鼬 5.4.6。

我的猫鼬模式看起来像这样:

stuff: String,
user: 
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    ,
moreStuff: String,
);

我需要动态构建我的查询,要查询的可能字段之一是user。要查询的字段通过params 对象发送到服务器。当我要查询的字段是stuff 时,这很容易。我只是执行以下操作:

let query = ;
query.stuff = params.stuff;

this.model('MyModel').find(query)...

但是,我不知道如何搜索用户,因为 params.user 只是 mongo id 的字符串版本,但它需要格式化为 objectId("params.user") 才能使查询工作。也就是说,我需要这样的东西:

query.user = objectId("params.stuff");

我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

我通常这样做。

const ObjectId = require('mongodb').ObjectID
const MyModel = require('../models/mymodel')

let query = MyModel.findOne()

query.where('_id').equals(new ObjectId(params.stuff))

【讨论】:

以上是关于如何动态构建具有 objectId 的 mongoose 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 mongo ObjectID 在 python 中是不是有效?

如何在 mongo 控制台中通过 ObjectId 搜索对象?

如何在没有 ObjectId 的情况下将 Mongo 与 Spring Data 一起使用

在 C# 中动态查询 Mongo 集合

BSON::ObjectId 与 Mongo::ObjectID

BSON::ObjectId 与 Mongo::ObjectID