【发布时间】:2017-06-30 19:38:12
【问题描述】:
我是 mongoDB 的初学者,我想将它用于带有 NodeJS 的项目。 一切都很好,直到我不得不更新我收藏中的一些文档。
所以基本上,我有一个包含事物列表的文档,我想通过在列表中添加一些内容来更新它。所以我正在尝试使用 Update 方法,但我真的很难使用 $addToSet 和 $push (我的意思是它们根本不起作用)。 我认为我的语法是正确的,因为如果我执行 $set,它就可以正常工作,就像这样:
collection.update(
{ "keyboard.name":"k1" },
{
$set: {
keys: {
"myFirstKeyname": {"mySecondKeyname": "myValue"}
}
}
},
{
upsert: true
}
)
但如果我只是将 $set 替换为 $addToSet 或 $push,它不会对数据库执行任何操作,但我也没有错误...
我在这里和那里阅读了很多东西,我看到很多人都有这个问题,但我找不到解决方案。
我的猜测是问题出在我尝试更新嵌套字段的事实,但我不确定。
所以我尝试做这样的事情:
$addToSet: {
keys: {
[myFirstKeyname]: {"mySecondKeyname": "myValue"}
}
}
而且我还尝试像这样在 javascript 中构建我的查询:
toInsert = JSON.parse(obj); // obj comes from the parameters of my function
let keyName = Object.keys(toInsert)[0];
let fieldValue = toInsert[keyName];
let update = { $addToSet: { "keys": {} } }
update['$addToSet']['keys'][keyName] = toInsert[keyName];
update = JSON.stringify(update)
返回这个:
{ "$addToSet": { "keys": { "myKeyName": {"value": "myValue", "type": "key"} } } }
如果我将 $addToSet 替换为 $set,它会起作用。
我也尝试了点表示法,但它也不起作用,在我的情况下我不能真正使用它,因为我想要一个动态键名作为我插入的新值。 我还尝试复制并粘贴 mongoDB 文档中提供的示例,但没有成功...
Sooo...我做错了什么?有没有人有一个有效的样本? 那可能来自我的代码的其他地方吗?
编辑:事实上,我试图更新一个子集合,这与数组不同。这就是 $addToSet 不起作用的原因。
【问题讨论】:
标签: javascript json node.js mongodb