我正在尝试在MongoDB中为每个用户存储一组卡片。集合基本上是一组拥有相关数量的自有卡片。
Collection {
user: ...,
cards: [ {cardId: 133, qty: 3}, {cardId: 22, qty: 1} ]
}
我正在使用node.js
和mongoose
构建API,我会以[ {cardId: 133, qty: 2}, {cardId: 111, qty: 4} ]
的形式收到请求。
现在我需要在cards
数组中创建卡条目(如果它不存在),或者如果数量已经存在则更新数量。
我需要有效地执行此操作,因为集合可能包含数千张卡片,所以我想出了这个Schema
:
var OwnedCard = new Schema({
cardId: { type: String, index: true, required: true},
qty: { type: Number, required: true}
});
var Collection = new Schema({
userId: { type: String, index: true },
cards: [OwnedCard]
});
我不确定如何利用index
上的cardId
来快速查找和更新(或创建丢失)卡片中的
基本上,对于请求中的每个{ cardId: ..., qty: xxx }
=>查找/更新,或在卡阵列中创建正确的条目。
到目前为止,我(找到用户的集合):
Collection.findOne({userId: userId}, function (err, collection) {
var cards = collection.cards; // the cards
});
但是我不希望将它们作为Javascript对象进行过滤,因为它没有利用索引并且可能很慢,而是寻找一种方法来让mongo快速检索单个卡条目。 / p>
关于如何实现这一目标的任何想法?