2016-04-05 17 views
0

Hy、MongoDB、Java - JSONからクエリへ文書

次のMongoDBのクエリをMongoDB Javaドライバのクエリに変換する助けが必要です。

クエリが機能することにご注意ください。

db.days.aggregate([ 
    { $match: { 'day' : 'March_1'}}, 
    { $project: { 
     _id : 0, 
     day: 1, 
     events: {$filter: { 
      input: '$events', 
      as: 'event', 
      cond: {$eq: ['$$event.year', '2002']} 
     }} 
    }} 
]) 

私の試行はこれですが、失敗し、あなたの助けが必要です。

Document query = new Document("$match", new Document("day", day)). 
    append("$project", new Document("_id", 0). 
      append("day", 1). 
      append("events", new Document("$filter", new Document(
        "input", "$" + category). 
        append("as", "event"). 
        append("cond", new Document("$eq", Arrays.asList("$$event.year", year)))))); 

私は取得していますエラーが

"{ "ok" : 0.0, "errmsg" : "A pipeline stage specification object must contain exactly one field.", "code" : 16435 }" 

ですありがとうございました!

+0

を使用し、同じオブジェクトで$マッチと$プロジェクトを置かないでください? – Arcath

+0

編集をご覧ください。ありがとうございました! –

+0

私はそれが問題だと思うのは、私は配列の代わりにドキュメントを構築するということです。しかし、私はドキュメントを使用して配列を構築するものは何も見つかりませんでした。 –

答えて

4

は、あなたがどのようなエラーを取得しているリストに

AggregateIterable<Document> iterable = collection.aggregate(
    asList(
    new Document("$match", new Document("day", day)), 
    new Document("$project", 
     new Document("_id", "0") 
      .append("day", 1) 
      .append(
       "events", 
       new Document(
        "$filter", 
        new Document("input", "$events") 
         .append("as", "event") 
         .append(
          "cond", 
          new Document("eq", Arrays.asList("$$event.year", year)) 
         ) 
       ) 
      ) 
    ) 
    ) 
) 
+0

ありがとうございます!私は数日前にMongoDBを使い始めました。私はJavaで自分自身を殺すつもりです... –