使用JavaScript对象的NodeRed到MongoDB操作

mspsb9vt  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(96)

因此,作为学校练习的一部分,我自己的项目的一部分,我试图制作一个NodeRed服务器,它返回天气数据,将其保存到MongoDB,并在将来搜索同一位置时返回。
我的NodeRed服务器正在尝试使用“node-red-contrib-mongodb 4”v 2.3.0节点完成对远程MongoDB数据库的replaceOne()操作。目的是检查是否存在具有三个匹配值(城市,国家,openweathermap_id)的文档。如果是,更换它。如果没有,则创建一个新文件。
问题是传递给MongoDB节点的对象会提示“MongoInvalidArgumentError:文档必须是一个有效的JavaScript对象”错误,我不完全确定为什么,虽然我认为这是因为正在进行的操作,因为insertOne()工作。
节点主页:https://flows.nodered.org/node/node-red-contrib-mongodb4
错误与连接配置无关,对同一MongoDB数据库的其他操作正常。
我已经尝试了多种不同的结构和方法的对象。这是最近的一个。
这个对象(msg.payload)被传递给函数节点。

{"city":"Happy Place","country":"Over There","weather":"Clouds","tempc":14.2,"temp_maxc":15,"temp_minc":14,"humidity":84,"pressure":1023,"windspeed":2.57,"winddirection":210,"clouds":40,"description":"The weather in Happy place at coordinates: 32.2125, 75.1209 is Clouds (scattered clouds).","openweathermap_id":111,"timestamp":"2023-08-24T15:06:09.219Z"}

还尝试将对象 Package 在数组中,该方法适用于insertOne()操作,但不适用于replaceOne()
下面是指向MongoDB节点的函数节点的代码:

msg.filter = {
    city: {$eq: msg.payload.city},
    country: {$eq: msg.payload.country},
    openweathermap_id: { $eq: msg.payload.openweathermap_id }
};
 
msg.replacement = { 
    city: msg.payload.city,
    country: msg.payload.country,
    weather: msg.payload.weather,
    tempc: msg.payload.tempc,
    temp_maxc: msg.payload.temp_maxc,
    temp_minc: msg.payload.temp_minc,
    humidity: msg.payload.humidity,
    pressure: msg.payload.pressure,
    windspeed: msg.payload.windspeed,
    winddirection: msg.payload.winddirection,
    clouds: msg.payload.clouds,
    description: msg.payload.description,
    openweathermap_id: msg.payload.openweathermap_id,
    timestamp: msg.payload.timestamp
};

msg.options = {
    upsert: true
};
return msg;

下面是MongoDB节点设置的图片。

我很难理解为什么这不是一个有效的JavaScript对象。

jtjikinw

jtjikinw1#

我没有意识到所有的CRUD值都必须以数组的形式存在于msg.payload中。我认为只有文档的值需要。
以下是其他遇到此问题的人的工作代码:

msg.payload = [

    {city: { $eq: msg.payload.city },
    country: { $eq: msg.payload.country },
    openweathermap_id: { $eq: msg.payload.openweathermap_id }},

    {city: msg.payload.city,
    country: msg.payload.country,
    weather: msg.payload.weather,
    tempc: msg.payload.tempc,
    temp_maxc: msg.payload.temp_maxc,
    temp_minc: msg.payload.temp_minc,
    humidity: msg.payload.humidity,
    pressure: msg.payload.pressure,
    windspeed: msg.payload.windspeed,
    winddirection: msg.payload.winddirection,
    clouds: msg.payload.clouds,
    description: msg.payload.description,
    openweathermap_id: msg.payload.openweathermap_id,
    timestamp: msg.payload.timestamp},

    {upsert: true}
    
    ];

return msg;
  • 以提问者的名义发布。*

相关问题