如何将 node-red 中的 ObjectID 作为查询参数传递给 mongodb?

How to pass ObjectID as query parameter in node-red to mongodb?

我正在使用 node-red-contrib-mongodb3 并且无法将 ObjectId 作为参数传递,无法使用 MongoDB auto-generated _id,有什么方法可以使用“_id” ": 'ObjectId("myID")' 作为参数?

我已遵循有关传递查询参数的模块教程node-red-contrib

举个例子:

我的 collection 中有以下文档:

{
    "_id" : ObjectId("5c9156c7f8c3ec3259454571"),
    "name" : "teste_site_1",
}

如果我作为 msg.payload 传递给 findOne 操作

msg.payload = { "name" : "teste_site_1" }

returns 我的文档在 _id 中没有 ObjectID

{
    "_id" : "5c9156c7f8c3ec3259454571",
    "name" : "teste_site_1",
}

如果我将 _id 作为参数传递:

msg.payload = { "_id" : "5c9156c7f8c3ec3259454571" }

returns空。

我无法在 node-red 中调用 ObjectId,也无法作为字符串 ObjectId 传递。

我想知道是否已经有办法将 ObjectId 作为参数传递。 这是一个错误还是我遗漏了什么?

我已经通过在 'mongodb' 节点模块中使用 ObjectId 函数的 return 作为参数解决了问题,但是为了在函数节点内使用节点模块,必须将其导入到全局上下文中你的节点红色目录。 在 windows:

C:\users\username\.node-red\settings.js

在Ubuntu

~\.node-red\settings.js

并将 ObjectId 作为全局导入包含在内

functionGlobalContext: {
        require: require, // Not mandatory
        ObjectId : require('mongodb').ObjectID,
},

我还包含了 'require' 模块,因为有些人可能会发现不乱用 settings.js 很有用,并且不需要重新启动进程来添加未来的模块。

在功能节点内部,我只是按如下方式传递了有效载荷。

var ObjectId = global.get('ObjectId');

msg.payload={
    "_id":ObjectId("5c9156c7f8c3ec3259454571")
};

return msg;