2017-07-04 11 views
1

は、私はこれらのようなオブジェクトをMongoのコレクションを持っている:それは最後のID番号(最初のオブジェクトに存在しない場合リバース正規表現の選択は

[ 
{ 
    "_id" : "a2d", 
    "entityType" : "Location", 
    "type" : "STRING", 
}, 
{ 
    "_id" : "a1_order", 
    "entityType" : "Order", 
    "type" : "STRING", 
} 
] 

は、すべての文書のidから_entityTypeを追加しようとすると、上記の場合)。

mongoをSpringで使用していますが、idのentityTypeを持たないすべてのオブジェクトを取得するには、すでに最初のステップが必要です。

正規表現を使用してこのような何か、について考えるが、私はそれはのようになりますかどうかはわかりません:あなたは内のデータを使用する必要があるとして、あなたが実際に、ここでは「逆正規表現」をしたい

Query query = new Query(); 
query.addCriteria(Criteria.where("id").regex("here i need the entity type of the current document")); 

答えて

1

別のフィールドに一致させるためのドキュメント。

現在のところ、MongoDBでこれを行うには、サーバー上のJavaScriptを評価する$whereを使用します。春のMongoのためだから、あなたの代わりにBasicQuery必要があるので、我々はBasicDBObjectCode primativesから構築することができます:それは「終わりentityTypeからの値と一致するかどうかを確認するために文書で"id"フィールドをテストします

BasicDBObject basicDBObject = new BasicDBObject("$where", 
      new Code("!RegExp('_' + this.entityType + '$','i').test(this.id)")); 

    BasicQuery query = new BasicQuery(basicDBObject); 

文字列の "と"ケース "を考慮せずに。 !Notの条件なので、ロジックの "逆"はフィールドが実際にそのように終了した "不一致"に適用されます。

2

正規表現は、 '^'( 'で始まる正規表現)で作成できます。

だから、あなたはすべての文書にポイントし、このフィルタ

List<Document> result = new ArrayList<Document>(); 
    StringBuilder idPrefix = new StringBuilder(); 
    idPrefix.append("^"); 
    idPrefix.append(idCode); 
    idPrefix.append("_"); 
    List<Bson> filters = new ArrayList<Bson>(); 
    filters.add(Filters.regex("_id", keyPrefix.toString())); 
    for (Document d : yourCollections.find(Filters.and(filters))) 
     list.add(d); 
をチェック機能を必要とします
関連する問題