Mongoose / Mongo独特的子文档

时间:2014-07-22 20:57:30

标签: node.js mongodb mongoose

嘿伙计们,我很难找到问题的答案。我想让我的数据库保存订阅,这样可以节省单独的主题标签。我希望每个订阅都有唯一的主题标签,但在主题标签名称上使用unique对我的架构不起作用。在每个标签内,我都有该标签的服务(与我的问题无关)。这是我的架构...

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var Services = new Schema ({ 
    type : {type : String},
    subscriptionInfo : Schema.Types.Mixed,
    data : Schema.Types.Mixed
});

var Hashtags = new Schema ({
    name: {type : String},
    services : [Services]
});

var SubscriptionSchema = new Schema ({
    eventId : {type : Number, unique : true},
    hashtags : [Hashtags]
});

module.exports = mongoose.model('Subscription', SubscriptionSchema);

最初我创建了一个订阅,它使用一个空的hashtag对象创建一个条目。我想定期添加主题标签,但我希望它们是唯一的。我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

您希望使用$ addToSet运算符将Hashtag添加到hashtags数组中。在Mongoose中有多种方法可以做到这一点。例如,您可以使用MongooseArray#addToSet,如下所示,我通过用String替换完整的Hashtag对象来简化一些事情:

var Subscription = mongoose.model("Subscription", SubscriptionSchema);
var subscription = new Subscription({eventId: 11, hashtags: ["#monkeys"]});
subscription.save(callback); // subscription will be saved to database with hashtags = ["#monkeys"]

// later...
subscription.hashtags.addToSet("#monkeys", "#trampolines");
subscription.save(callback); // subscription now has hashtags = ["#monkeys", "#trampolines"]

您还可以使用Model.update函数:

Subscription.update({ eventId: id }, { hashtags: { $addToSet: "#trampolines" }}, callback);