

Raspberry Pi2 のOSを Debian jessie から stretch へアップデートしたところ、 jessie の環境で Node, MongoDB が動いていたが、アップデートしてから Node からMongo へアクセスするとエラーを吐いてきました。
MongoDB のバージョンが古い。 2.6以上が必要と!!!!
たしかに、こちらの環境は、Nodeのバージョンは 5.6、 MongoDBは 2.4.10
Mongoの方は、Raspberry pi で公式に入手できるのはこのバージョンしかない(古すぎるけど)
最初は、MongoDB のバージョンを上げることを考え、ネット上を徘徊したがメジャーバージョンアップだとデータの持ち方も変わるなど、リスクが伴いそうな気がします。
Node, MogoDB それぞれ単独では動作するので、Node の MongoDB ドライバーに問題がありそうだということが解ってきました。
ここまで、半日かかった~~。
そこで、Nodeのドライバーを管理している npm のパッケージインストール状況を確認してみると。
(これより以下を一部加筆修正しました。2019-06-22)
$npm list
mongoose@5.1.6 <-- ここ
mogoose のバージョンが stretch のアップデートに引っ張られて 5.1.6 が入っているのが原因のようです。
MongoDB Server Version Compatibility では
MongoDB Server 2.4.x: mongoose ^3.8
or 4.x
MongoDB Server 2.6.x: mongoose ^3.8.8
or 4.x
MongoDB Server 3.0.x: mongoose ^3.8.22
, 4.x
, or 5.x
MongoDB2.4 では、mongoose は 4.x でした。
ここまでくれば、ドライバーバージョンを下げてやればいい。
package.json ファイルの mongoose を元に戻し、頭に^キャロットを付けメジャーバージョンが一致するものに固定します。
"dependencies": {
"mongoose": "^4.4.17",
再度、 $npm install として npm を更新してみると。
$npm install
mongoose@4.13.41
これで、Node がエラーを吐かなくなりました。
本来は、MongoDB のバージョンを 3 に上げたいが、色々と制約がありそうなので、今後の課題とします。
.end