2016-05-27 12 views
1

文書に配列があり、この配列の最後の要素を受け取ろうとします。配列の最後の要素だけを取得する

私のコードは次のとおりです。

Post.find({_id:postId},{'comments':{'$slice':-1}}); 

これは私のすべてのオブジェクトを与えるが、コメントの配列は、最後の要素が含まれています。一方、

​​

は私にコメントだけを与えます。

2つのコマンドを組み合わせる方法はわかりません。どのようにそれを行うことができますか?私はこれが役に立てば幸い

{ 
"users":[], 
"comments":["string1","string2","string3"], 
"lastValue":"Wow" 
"name":"jow" 
"_id": { 
    "$oid": "5747d6bdecfae9d0560077cc" 
    }, 
} 

おかげ

+1

はあなたのコレクションからサンプル文書を投稿してくださいすることができ? – Sandesh

+0

あなたの目的は何ですか?どの配列から最後の要素を取得しようとしていますか? – Sandesh

+0

"comments":["string1"、 "string2"、 "string3"]、 – Alon

答えて

2

Post.aggregate([ 
    { 
    $match: { 
     '_id.$oid': postId 
    } 
    }, 
    { 
    $unwind: "$comments" 
    }, 
    { 
    $group : { 
     _id: "$_id.$oid", 
     comment: { $last: "$comments" } 
    } 
    } 
]); 
+0

これはほとんど動作していますが、私は2番目のものを使用しますが、_idの問題は_idが見つかりません。 私は_id:postIdを削除すると、最後のすべての要素を受け取ります。 – Alon

+0

@Alonあなたの例では、{{_id:postId}}を検索しますが、与えられた例では '$ oid'があります。あなたが必要とするのは、 '$ group _id'フィールドと' $ match'基準に有効なコレクション識別子を指定することだけです。答えを更新しました。 –

+0

あなたの修正は動作しません。その使用が見つかりました _id:mongoose.Types.ObjectId(postId) – Alon

0

。 MongoDBの以前のバージョンの

Post.aggregate([ 
    { 
    $match: { 
     '_id.$oid': postId 
    } 
    }, 
    { 
    $project: { 
     comments: { 
     $slice: [ "$comments", -1 ] 
     } 
    } 
    } 
]); 

:あなたはMongoDBの(バージョン3.2)は、そのような集約$slice使用する場合があります

db.Post.find({_id:postId},{'comments':{'$slice':-1},_id:0,users:0,lastValue:0,name:0}); 
+0

私は彼らのスキルを簡単にすることを望んでいました。 – Alon

関連する問題