使用猫鼬有效地查询索引子阵列

时间:2017-08-27 15:13:00

标签: node.js mongodb mongoose

我正在尝试在MongoDB中为每个用户存储一组卡片。集合基本上是一组拥有相关数量的自有卡片。

Collection {
    user: ...,
    cards: [ {cardId: 133, qty: 3}, {cardId: 22, qty: 1} ]
}

我正在使用node.jsmongoose构建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>

关于如何实现这一目标的任何想法?

0 个答案:

没有答案