2016-02-13 47 views
1

所以我知道我应该怎么任何常规字符串/对象添加到一个JSON对象 - 但是,我需要将以下蒙戈命令添加到我的JSON对象:如何将特殊的Mongo表达式添加到JSON对象?

$set : { "author" : req.body.name } 

正如你所看到的,它不是简单到只是在做:

myJsonObject.author = "$set..." etc. 

很抱歉,如果这是一个欺骗的问题 - 这是不是最容易受谷歌没有吨无关的答案弹出的。

我需要知道这个的原因是因为我希望能够根据用户在表单中更改的内容来构建JSON对象。所以,我遇到的一个新问题是,即使我可以构建带有多个项目的JSON对象进行更改,MongoDB也只会更新对象中的最后一个项目。我的例子JSON对象是在这里:

updateItem = { 
    $set : { "name" : "Squid bonobo" }, 
    $set : { "author" : "Mardy Bum" } 
}; 

和代码发出更新命令的代码片段如下:

updateData.update(searchItem, updateItem, false, true, function(err, results) { 
     console.log(results); 
     db.close(); 
    }); 

我发现这个解决方案在the following git site

任何人都可以帮助解决这些问题吗?

感谢您的帮助:)

卡梅伦

+0

这我不清楚你问这里。你是否试图直接从你接收的json对象中添加到你的mongodb中? – thatgibbyguy

回答

0

你需要形成你JSON在下面的结构:

updateItem = { 
    $set : { "name":"Squid bonobo","author":"Mardy Bum"} 
} 

JavaScript对象可以被重复键/属性声明,但是它们的值会以任何顺序被覆盖,并带有key的最新绑定值。

这里,$set是已经设定两次以由可变updateItem引用的相同的对象,因此,只有一个值的关键/属性,即最后遇到,将被关联到key。在这种情况下,优先值是:

$set:{ "author":"Mardy Bum" } 

和被执行最终的查询变得,

updateItem = { 
    $set : { "author" : "Mardy Bum" } 
}; 
+0

感谢您的回答。我可以证实这对我有效。但是,我怎么能在$ set参数中构建查询呢?每次调用该函数时都会有所不同,因此它需要进行更改。例如,我如何添加其他字段和条目,例如“价格”:“12.99”。谢谢:) –

+0

编辑:我通过简单地创建一个JSON对象之前曾调用$设置的东西,然后加入ojbect一旦我检查是否有任何更改已经作出。代码很简单:updateItem = { $ set:editItems }; –