2014-11-04 42 views
1

我想創建一個使用貓鼬的MongoDb模型,我想確保只有一個文檔存在特定的用戶和文件。覆蓋以前的文件的組合索引

var FileStatusSchema = new mongoose.Schema ({ 
    file: mongoose.Schema.Types.ObjectId, 
    user: mongoose.Schema.Types.ObjectId, 
    hasSeen: { type: Boolean, default: false } 
}) 

FileStatusSchema.index = ({file: 1, user: 1}, {unique: true}) 

現在,如果我嘗試保存文件與文件和已經存在的用戶的組合,它提出了一個重複鍵錯誤。

有什麼方法可以配置MongoDB覆蓋文檔而不是引發異常?

+0

感謝。所以如果我使用upsert,我需要指定索引嗎? – ZeMoon 2014-11-05 05:31:31

回答

1

如果文件不存在,這個命令將您的答覆,創建新的

collection.update({file:2112,user:21421}, {hasSeen:true}, {upsert:true}); 
+0

那麼我需要在使用此查詢時指定索引嗎? – ZeMoon 2014-11-05 06:03:21

+0

是的,你必須指定唯一的索引,因爲當多個客戶端同時使用此更新操作,並且他們插入的文檔具有相同的用戶和文件字段時,則每個更新操作都可能導致插入,並且會有相同的文檔多於一個 查看文檔: http://docs.mongodb.org/manual/reference/method/db.collection.update – kaxi1993 2014-11-05 06:49:58

+0

謝謝!它現在完美。 – ZeMoon 2014-11-05 07:18:39