sql >> データベース >  >> NoSQL >> MongoDB

Springデータのmongodbクエリは、StringをObjectIdに自動的に変換します

    問題は次のように説明できるようです。クラスでObjectIdの代わりにStringを使用し、それらのIDを他のドキュメント(および埋め込みドキュメント)の参照(dbrefなし)として使用する場合、それらはプッシュされます。文字列として(文字列なので問題ありません)。 Springデータはそれらをobjectidに再度マップできるため問題ありませんが、前述のようなクエリを実行する場合は問題ありません。フィールドは比較でオブジェクトID(この場合は$ ne演算子)に変換されますが、埋め込みドキュメントでは文字列と見なされます。したがって、まとめると、私の意見では、この場合の$ne演算子はフィールドを文字列と見なす必要があります。

    私の解決策は、IDが参照であるドキュメントにオブジェクトIDとして文字列を格納するカスタムコンバーターを作成することでした

    public class VoteWriteConverter implements Converter<Vote, DBObject> {
    
      @Override
      public DBObject convert(Vote vote) {
        DBObject dbo = new BasicDBObject();
        dbo.put("userid", new ObjectId(vote.getUserid()));
        dbo.put("value", vote.getValue());
        return dbo;
      }
    }
    



    1. NodeJSサーバーが同時リクエストでMongoDBの検索クエリをハングアップする

    2. MongoError:ローカルホストへの接続0:27017がタイムアウトしました

    3. MongoDBレプリケーションがクラッシュし、再起動しません

    4. 制限を使用するときにMongoDBでドキュメントの総数を取得する