2016-10-19 11 views
1

をtruthyに戻りますが、私はこのようになりますアクションコレクションにバッチを挿入する必要がない場合にのみ見つけるとinsertMany:のMongoDBがマッチした組み合わせが

:アクションコレクションのスキーマがどのように見える

[ 

    { 

    "userId": "57ee65fef5a0c032877725db", 

    "postId": "57f63ce196b01748e4712ed3", 

    "type": "like" 

    }, 

    { 

    "userId": "57ee65fef5a0c032877725db", 

    "postId": "57f7335223a76c0f780a44c5", 

    "type": "dismiss" 

    }, 

    { 

    "userId": "57ee65fef5a0c032877725db", 

    "postId": "57f7335223a76c0f780a44c5", 

    "type": "dislike" 

    } 

] 

const ActionSchema = new mongoose.Schema({ 
    userId: mongoose.Schema.Types.ObjectId, 
    postId: mongoose.Schema.Types.ObjectId, 
    type: String 
}, { 
    timestamps: true 
}); 

挿入前この配列内のこの特定の「userId」と「postId」にdbのaction collectionに一致する組み合わせがないことを確認します。ユーザは、特定の投稿が与えられたときに、他のユーザによって投稿された単一のアクションしか実行できないためです。

+0

postIdsを取得し、 userIdsをバッチから配列で別々に検索し、$と:{{{$ in:payload.userIds}、{$ in:payload.postIds}}]を使用して検索し、insertManyの使用中にこれらのドキュメントを追加しないでください。これはちょっとばかげたやり方でバグです。 –

答えて

1

ハルーンあなたの質問には自明ではなかったが、私はあなたのシナリオから理解することは、私はあなたのような形態であると複合インデックスが必要だと思うpostId のuserIdのユニークなセットが必要です。それは

ActionSchema.index({postId: 1, userId: 1}, {unique: true}); 

は、それはあなたが常にユニークpostIdのセットとのuserIdを持っていることを保証するだろうあなたのケースのために

anySchema.index({field1: 1, field2: 1}, {unique: true}); 

間違ったシナリオを取得する場合、私に教えてください

+0

ありがとう@abm。それは魔法のように働いた。 –

0

あなたは特定のJSONにuserIdというユニークなpostIdを設定することを意味しますが、postIdはなく、userIdは繰り返す必要がありますか?

+0

はい、正確です。 –

+0

このようにモデルを定義すると、最初のステップで重複したエントリを防ぐことができ、後で多くの作業を節約できます。 'use strict'; var mongoose = require( 'mongoose'); var accountTypeSchema = new mongoose.Schema { 名前:{タイプ:文字列、インデックス:{ユニーク:true}}、 作成:{タイプ:日付、デフォルト:Date.now()}、 が削除されました:{type :Number、default:0} }); module.exports = mongoose.model( 'AccountType'、accountTypeSchema); –

+0

少しの説明が本当に役に立ちます –

1
'use strict'; 
var mongoose = require('mongoose'); 

var accountTypeSchema = new mongoose.Schema({ 
    name:{type:String, index: { unique: true }}, 
    created: {type: Date, default: Date.now()}, 
    deleted: {type: Number, default: 0} 
}); 

module.exports = mongoose.model('AccountType', accountTypeSchema); 
+1

ここであなたは "名前"フィールドがユニークであることを知ることができますので、あなたのポストIDはユニークにすることもできますし、重複する値を入力するたびにメッセージを警告します。 –

+0

私は複合インデックスのようなものを求めました。 :) –

関連する問題