2012-11-15 44 views
8

Tôi có quan hệ nhiều đến nhiều bằng cách sử dụng mongoose, trông giống như thế này.Tránh các mục trùng lặp trên mảng Mongoose

TeamSchema = new Schema 
    name : String 
    players: [{ type: ObjectId, ref: 'Player' }] 

Điều tôi muốn làm là đảm bảo rằng một Người chơi không xuất hiện hai lần trong một Nhóm.

Khi tôi làm:

team.players.push(player) 
team.save() 

Nếu tôi đã thêm các cầu thủ trước đây, tôi thấy các cầu thủ id hai lần trên đội doc. Có một số loại mongo/mongoose cờ tôi có thể thiết lập để các phương pháp tiết kiệm ném một ngoại lệ, hoặc không thêm các cầu thủ. Tôi biết tôi có thể làm kiểm tra bằng tay, nhưng tôi thích một giải pháp đơn giản hơn.

Cảm ơn!

Trả lời

20

Sử dụng các nhà điều hành $addToSet cập nhật như sau:

Team.update({_id: team._id}, {$addToSet: {players: player}}) 

Giả sử player là ObjectId của một cầu thủ, nó sẽ chỉ được thêm vào players mảng của nhóm nghiên cứu nếu nó chưa có mặt.

5

Chỉ cần sử dụng phương pháp addToSet:

team.players.addToSet(player) 
team.save() 
Các vấn đề liên quan