0

私はmongodbをいじり始め、質問を思いつきました。たとえば、JSONで表現し、Mongo DBに格納/ロードするIDフィールド(たとえば、「ID」という名前)を持つオブジェクト(POJO)があります。私が理解している限り、どのオブジェクトにも常に_idフィールド(アンダースコア、小文字)があります。私がやりたいのは、クエリ中にmongodbが_idではなくフィールドIDを持つJSONを返すようにすることです。SQLでは次のようなものを使用します

SELECT _id as ID ...

私の質問は、mongo dbでこれを行うことが可能かどうかです。可能であれば、Javaベースの例は本当に高く評価されます:)

レコードを反復処理して_idをIDに手動で置き換えることが可能であることは理解していますが、このO(n)ループは必要ありません。また、行を複製して「id」と「_id」の両方を保存したくないので、クエリまたはJavaドライバーのレベルで解決策を探しています。

よろしくお願いします。良い一日を。

4

3 に答える 3

0

MongodbはSQLを使用せず、オブジェクトクエリ言語やコレクションに似ています。

あなたが試すことができるのは、MongoJavaドライバーを使用した以下のコードに似たものです

Pojo obj = new PojoInstance();
obj.setId(id);
db.yourdb.find(obj);
于 2013-02-27T07:43:28.493 に答える
0

最終的に、Javaドライバーで次のアプローチを使用することになります。

DBCursor cursor = runSomeQuery();
try {
        while(cursor.hasNext()) {
            DBObject dbObject  = cursor.next();
            ObjectId id = (ObjectId) dbObject.get("_id");
            dbObject.removeField("_id");
            dbObject.put("ID", id.toString());
            System.out.println(dbObject);
        }

    }   finally {
        cursor.close();
    }

これが最善の解決策なのか、それとも他のより良い選択肢があるのか​​疑問に思いました。

于 2013-02-27T18:23:11.767 に答える
0

これが私がJavascriptで行っていることの例です。それはあなたに役立つかもしれません。私の場合、_idフィールドを削除し、2つの非常にネストされたフィールドをエイリアスして、より単純な名前を表示しています。

db.players.aggregate([
  { $match: { accountId: '12345'}},
  { $project: {
    "_id": 0,
    "id": "$id",
    "masterVersion": "$branches.master.configuration.player.template.version",
    "previewVersion": "$branches.preview.configuration.player.template.version"
    }
  }
])

これがお役に立てば幸いです。

于 2015-01-14T23:18:31.987 に答える