来自关系数据库背景的Meteor和MongoDB的新手。这个问题实际上反映了我在MongoDB中处理关系的困惑。MongoDB - 插入两个集合,一个集合引用另一个作为子文档
示例:我想将一个配方插入一组配方中,在这种情况下,这是一个逗号分隔的多个配料串。然而,我想要将这些成分同时加入到一系列成分中。我希望食谱指的是成分集合中的成分,例如,如果我第一次得到某个成分的拼写错误,我可以稍后在成分集合中更新它,并且使用该成分的所有配方也更新了。
看来,这样做的方法是将成分集合作为子文档包含在食谱集合中。
但是,我不知道我该如何实际执行该操作。使用流星在JS代码示例如下:
Recipes = new Mongo.Collection("recipes");
Ingredients = new Mongo.Collection("ingredients");
Template.body.events({
"submit .new-recipe": function(event) {
// Prevent default browser form submit
event.preventDefault();
// Get value from form element
var text = event.target.text.value;
var splitText = text.split(",");
var nInputs = splitText.length;
var recipe = [];
for (var i = 0; i < nInputs; i++) {
// Insert an ingredient into the ingredients collection
Ingredients.insert({
itemName: splitText[i].trim(),
createdAt: new Date()
});
recipe.push(splitText[i]);
}
// Insert the list of ingredients as a recipe into the recipes collection
Recipes.insert({
recipe: recipe,
createdAt: new Date()
});
// Clear form
event.target.text.value = "";
}
});
显然,上述不正确地做这项工作。它切断了配料和配方之间的关系。但我如何维持这种关系呢?插入配料时,我是否会将配料中的各种配料放入食谱集合中?在插入配料时,我是否将整个配料文档作为配方文档的一部分插入配方集合中?
非常感谢!除了'check(ingredientNames,[String]);'行之外,一切都可以工作。错误消息说“检查”是一个未知的功能。我错过了什么?它来自一些JS库吗? – MichM
那很奇怪。 [检查](HTTP://docs.meteor。com /#/ full/check)是一个默认包含的软件包。你是否正在运行一个真正旧版本的流星? –
感谢您的线索!通过“流星加检查”解决 – MichM