Javascript 在meteor集合中处理可变键值对(无模式困境)

Javascript 在meteor集合中处理可变键值对(无模式困境),javascript,mongodb,meteor,nosql,Javascript,Mongodb,Meteor,Nosql,如果.insert语句中的一些键:值对是可选的(因此键:值对一直在变化),而它在循环中执行(我从表中读取数百行),您如何解决这个问题 由于集合中只有6个必填字段和6个可选字段,我不确定如何对其进行优雅的编码,以便不必在集合中插入空值。我有6个可选字段(如果我的数学是正确的话),36种不同的组合,我必须在if子句中处理,这并不实际。这是无模式MongoDB所造成的困境(除非我想浪费空间,并且在文档中有许多带有空值的key:value对) 我尝试使用一个与key:value对连接的字符串作为参数。这

如果
.insert
语句中的一些键:值对是可选的(因此键:值对一直在变化),而它在循环中执行(我从表中读取数百行),您如何解决这个问题

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

我尝试使用一个与key:value对连接的字符串作为参数。这在
.insert
命令(
语法错误
)中是不允许的,因为meteor需要
{key1:value1,key2:value2}
结构

我可以一次输入所有键:值对,然后启动最多6个
$unset
,以再次从文档中删除这些字段,但这并不是一个实际的解决方案(因为它将创建大量I/O操作,而实际上应该只有1个I/O操作)


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

您的代码应该将对象创建为object literal

var obj1 = {foo:"1", bar:"2"}
var obj2 = {foo:"3"} // no bar
然后让Mongo插入对象

collection.insert(obj1);
collection.insert(obj2);

出版物中的选择器/投影也一样,其中有可选参数等。

您能给我们看一些代码吗?这篇文章很好,但如果我能说明你的代码实际上是什么(即使是伪代码)以及为什么不起作用,我会更好地理解。现在我会考虑使用
匹配.Pattern
来验证你的查询对象,但我不知道你的实际代码是什么样子。upsert命令也是如此,您只需要使用Products.upert(selectorObject,modifiedObject);
insertedObject = {}
insertedObject[“price”] = itemPrice;
insertedObject[“name”] = itemName;
if (!! itemNote ) { 
  insertedObject["note"] = itemNote ; 
}
Products.insert(insertedObject);