嘿伙计们,我很难找到问题的答案。我想让我的数据库保存订阅,这样可以节省单独的主题标签。我希望每个订阅都有唯一的主题标签,但在主题标签名称上使用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对象创建一个条目。我想定期添加主题标签,但我希望它们是唯一的。我不知道该怎么做。
答案 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);