2017-11-12 12 views
0

マイMongoDBのコレクションは、このノード+のMongoDB:更新最後のオブジェクトネストされた配列に

{ 
    channelId: int, 
    channelName: string, 
    voteHistory: [ 
     { 
      createdAt: date, 
      votes: ['old vote','old vote','old vote'] 
     }, 
     { 
      createdAt: date, 
      votes: ['old vote'] 
     }, 
     { 
      createdAt: date, 
      votes: [] 
     } 
    ] 
} 
... 

voteHistoryのように見えますがcreatedAt(日)昇順でソートされます。 voteHistoryのLAST(最新)オブジェクトのvotes配列にオブジェクトをプッシュしたい場合は、1回の操作でどのように行うのですか?

$のプッシュと$プルが最も簡単な方法は、2つの事業

1でそれを行うことです特異アトミック操作Iのものの一部にすることはできませんので、結果はこの

{ 
    channelId: int, 
    channelName: string, 
    voteHistory: [ 
     { 
      createdAt: date, 
      votes: ['old vote','old vote','old vote'] 
     }, 
     { 
      createdAt: date, 
      votes: ['old vote'] 
     }, 
     { 
      createdAt: date, 
      votes: ['new vote!!'] 
     } 
    ] 
} 
+0

投稿が不明な場合は申し訳ありませんが、これはmongodb用です。 –

+0

これは明らかですが、実際には常に「最後の」配列項目が常に「最初の」配列項目であることを確認するのがはるかに簡単であると結論づける既存の点または2点を指摘することができます。 MongoDBには '$ push'のための' $ position'修飾子があります。この修飾子は配列が実際に常にこの順序で確実に記録されるようにします。あなたは常に "$ push"することができます:{"voteHistory.0.votes": "新しい投票!!"あなたが私のドリフトをキャッチするならば、あなたが "追加"ではなく "前に"付いていることを確認してください。 –

+0

@Neil funnily十分に私はすでにあなたが言ったようにあきらめることを決めました。私の配列はすでにソートされていますので、どの方向に並べ替えても問題ありません! –

答えて

0

のようになります。/findOne()またはより良いfindById()

2 /メモリ内の配列を変更=>あなたはmaybでき

あなたのドキュメントを保存スライス、長さ、プッシュ演算子を組み合わせることで1つの特異な演算で行いますが、正直なところ効率についてはわかりません。

関連する問題