1. ホーム
  2. node.js

[解決済み】mongooseの_idと文字列の比較

2022-04-18 05:11:51

質問

私はいくつかのデータを取得し、このようなオブジェクトに固執するnode.jsアプリケーションを持っています。

var results = new Object();

User.findOne(query, function(err, u) {
    results.userId = u._id;
}

その保存されたIDを元にif/thenを行うと、比較は決して真にはなりません。

if (results.userId == AnotherMongoDocument._id) {
    console.log('This is never true');
}

2つのidをconsole.logすると、完全に一致します。

User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002

これは何らかのデータ型の問題だと思うのですが、results.userIdを上記の比較が真となるようなデータ型に変換する方法がわからず、外注の脳みそ(通称Google)ではどうにもなりません。

どのように解決しますか?

Mongoose は mongodb-native ドライバーを使用しており、カスタム ObjectID タイプを使用します。ObjectID を比較するには .equals() メソッドを使用します。あなたの例だと results.userId.equals(AnotherMongoDocument._id) . また、ObjectID タイプには toString() メソッドを使用して、文字列化したObjectIDをJSON形式で保存したり、クッキーを保存したりすることができます。

を使用する場合 ObjectID = require("mongodb").ObjectID (mongodb-nativeライブラリが必要です)。 results.userId が有効な識別子であれば results.userId instanceof ObjectID .

などなど。