Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在MongoDB中正确插入对象?_Node.js_Database_Mongodb_Javascript Objects - Fatal编程技术网

Node.js 如何在MongoDB中正确插入对象?

Node.js 如何在MongoDB中正确插入对象?,node.js,database,mongodb,javascript-objects,Node.js,Database,Mongodb,Javascript Objects,我正在尝试在MongoDB中插入条目。所有对象的结构如下所示: { ids: { id_1: '7264432' }, ranktime: [ { pos: '4', date: '000' } ], name: 'Strength', version: 'Hi', artist: 'Example' } 现在,我想用如下对象向上插入ids对象: response[i] = { ids: { id_2: '55551123' }, ranktime: [ { pos:

我正在尝试在MongoDB中插入条目。所有对象的结构如下所示:

{
ids: { id_1: '7264432' },
ranktime:
   [ { pos: '4',
       date: '000' } ],
name: 'Strength',
version: 'Hi',
artist: 'Example'
}
现在,我想用如下对象向上插入
ids
对象:

response[i] = {
ids: { id_2: '55551123' },
ranktime:
   [ { pos: '4',
       date: '000' } ],
name: 'Strength',
version: 'Hi',
artist: 'Example'
}
导致:

{
ids: { id_1: '7264432', id_2: '55551123' },
ranktime:
   [ { pos: '4',
       date: '000' } ],
name: 'Strength',
version: 'Hi',
artist: 'Example'
}
我正在使用以下选项唯一地选择文档:

collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]} ,
{
  $set: {ids:  response[i].ids}
},
{upsert: true},
})
但如果ids字段被新值覆盖,而不是仅仅添加新值,则会发生所有这些情况。 MongoDB方法是否有任何解决方案可以实现这一点?
谢谢

我知道该怎么办了。出于某种原因,我不得不将$set作为管道传递。所以这是不起作用的

collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
{
  $set: {ids:  response[i].ids}
},
{upsert: true},
})
collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
[{
  $set: {ids:  response[i].ids}
}]
})
但这是有效的

collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
{
  $set: {ids:  response[i].ids}
},
{upsert: true},
})
collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
[{
  $set: {ids:  response[i].ids}
}]
})

如果我这样做的话,也不是一件好事。有人能解释一下吗?

我知道该怎么办了。出于某种原因,我不得不将$set作为管道传递。所以这是不起作用的

collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
{
  $set: {ids:  response[i].ids}
},
{upsert: true},
})
collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
[{
  $set: {ids:  response[i].ids}
}]
})
但这是有效的

collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
{
  $set: {ids:  response[i].ids}
},
{upsert: true},
})
collection.updateMany(
{ $and: [{name: response[i].name}, {version: response[i].version}, {artist: response[i].artist}}]}
[{
  $set: {ids:  response[i].ids}
}]
})

如果我这样做的话,也不是一件好事。有人能解释一下吗?

首先,词汇更正“upsert”意味着创建一个新文档,并通过update语句插入到集合中。修改现有文档是“更新”,在更新时向数组添加附加值通常称为“推送”。第一个不起作用,因为第二个参数(即更新)中包含了
{upsert:true}
。这是一个选项,应该放在
updateMany
的第三个参数中。这两条语句都将用新值完全替换
ids
字段,这是您的意图吗?我的意图是只添加新的key:values对,而保留现有值不变。我的“解决方案”的工作版本通过在set语句中添加[]括号来实现这一点。如果我不添加[]括号,当我使用
[{$set…}]
测试时,我的
ids
字段将被替换,而不只是添加新的一个字符串。它将替换该字段。是的,非常奇怪。我又试了一次。如果我设置了[]方括号,新对象就会被添加,如果我没有设置它们,字段就会被替换。这是版本问题吗?我在4.2.5上运行的第一个词汇更正“upsert”意味着创建一个新文档并通过update语句插入到集合中。修改现有文档是“更新”,在更新时向数组添加附加值通常称为“推送”。第一个不起作用,因为第二个参数(即更新)中包含了
{upsert:true}
。这是一个选项,应该放在
updateMany
的第三个参数中。这两条语句都将用新值完全替换
ids
字段,这是您的意图吗?我的意图是只添加新的key:values对,而保留现有值不变。我的“解决方案”的工作版本通过在set语句中添加[]括号来实现这一点。如果我不添加[]括号,当我使用
[{$set…}]
测试时,我的
ids
字段将被替换,而不只是添加新的一个字符串。它将替换该字段。是的,非常奇怪。我又试了一次。如果我设置了[]方括号,新对象就会被添加,如果我没有设置它们,字段就会被替换。这是版本问题吗?我正在运行4.2.5