2017-06-03 9 views
0

MongoDBドライバを使用してAzure DocumentDB/CosmsoDBを使用しようとしています。私は、機能の完全なセットが現在実装されていないので、多くの制限があることを学びました。私は集計関数、特に$ groupと.distinctを使用したいと思いますが、まだ利用可能ではないと思います。回避策として、私は別個の「トラッキング」文書を維持して、「別個のもの」を有効にしようとしています。 $ addToSetを使用してドキュメントを更新しようとしているが、次の取得:AddToSet操作にはターゲット配列フィールドが必要です

MongoError: Message: {"Errors":["Encountered exception while executing function. Exception = Error: AddToSet operation requires a target array field.\r\nStack trace: Error: AddToSet operation requires a target array field.\n at arrayAddToSet (__.sys.commonUpdate.js:2907:25)\n at handleUpdate (__.sys.commonUpdate.js:2649:29)\n at processOneResult (__.sys.commonUpdate.js:2484:25)\n at queryCallback (__.sys.commonUpdate.js:2461:21)\n at Anonymous function (__.sys.commonUpdate.js:619:29)"]} 

私が使用していupdateコマンドは:

var usersDocument = collection.updateOne(
    { "type": "users" }, 
    { $addToSet: {users: "[email protected]"} }, 
    function(err, count, status) { 
     console.log("updateOne err: " + err) 
     console.log("updateOne count: " + count) 
     console.log("updateOne status: " + status) 
    } 
) 

これはかなりストレートフォワードコマンドであることを私には思えるから引き出さ必要に応じてmongoのドキュメントとフィールドを調整します。たぶん私は本当に基本的な何かを見逃している?

私の最終的な目標は、私が望むなら(Azure固有のものにロックされないように)、私のコードをMongoクラスタに移動できるように移植性があることを確認することでした。開始するには、マルチサーバークラスタを管理する必要はありませんが、Azure CosmosDBはすばらしいスタートアップのように見えましたが、制限は悲惨です。

更新: ドキュメントを修正しましたが、実際に配列を持つフィールドがあるので、$ addToSetは配列に追加するのではなく値を置き換えています。私はそれについて新しい質問を作成します。

答えて

0

うん、何か基本的。エラーメッセージは実際には正しいものでした。既存の文書を検査した後:

{ "users": "[]" } 

をし、それを変更: を私が見つかりました。今、それが働いている

{ "users": [] }