处理流星集合中可变的键值对(无模式困境)

Handling changeable key value pairs in meteor collections (schemaless dilemma)

当你的 .insert 语句中的某些 key:values 对在执行时是可选的(因此你的 key:value 对一直在变化),你如何解决这个问题在一个循环中(我正在从 table 中读取数百行)?

因为我在集合中只有 6 个必填字段和 6 个可选字段,所以我不确定如何优雅地对其进行编码,这样我就不必将空值也插入到我的集合中。对于 6 个可选字段,我有(如果我的数学正确的话)我必须在 if 子句中处理 36 种不同的组合,这不是很实用。这是无模式 MongoDB 造成的两难境地(除非我想浪费 space 并且在我的文档中有许多 key:value 对具有空值)。

我试过使用与 key:value 对连接的字符串作为参数。 .insert 命令 (syntax error) 中不允许这样做,因为 meteor 需要 { key1:value1, key2:value2 } 结构。

我可以一次输入所有 key:value 对,然后触发多达 6 $unset 以再次从文档中删除这些字段,但这并不是一个真正实用的解决方案(因为它会创建很多 I/O 操作实际上应该只有 1 个 I/O 操作)。

有什么建议吗?你如何解决 Meteor 中可变键值对的问题?预先感谢您的帮助!

您的代码应将对象创建为对象文字。

var obj1 = {foo:"1", bar:"2"}
var obj2 = {foo:"3"} // no bar

然后你得到Mongo插入对象

collection.insert(obj1);
collection.insert(obj2);
insertedObject = {}
insertedObject[“price”] = itemPrice;
insertedObject[“name”] = itemName;
if (!! itemNote ) { 
  insertedObject["note"] = itemNote ; 
}
Products.insert(insertedObject);

与 selectors/projections 相同,在您有可选参数等的出版物中