Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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/8/file/3.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_Json_Mongodb_Mongoose - Fatal编程技术网

Node.js MongoDB在插入对象属性之前检查对象属性,否则创建新对象

Node.js MongoDB在插入对象属性之前检查对象属性,否则创建新对象,node.js,json,mongodb,mongoose,Node.js,Json,Mongodb,Mongoose,我使用MongoDB,我有一个简单的文档结构: name: String data: Array 0: Object lastUpdated: Number values: Array 我的目标是将新内容插入到我的值数组中,但在“lastUpdated”更改后,数据中应该有一个新对象,具有新的“lastUpdated”和“values”属性,然后将其插入 因此,我的查询一直插入到“data”的第一个元素中,直到“lastUpdated”属性发生更改。然后在“数据”数组中创建

我使用MongoDB,我有一个简单的文档结构:

name: String
data: Array
  0: Object
    lastUpdated: Number
    values: Array
我的目标是将新内容插入到我的值数组中,但在“lastUpdated”更改后,数据中应该有一个新对象,具有新的“lastUpdated”和“values”属性,然后将其插入

因此,我的查询一直插入到“data”的第一个元素中,直到“lastUpdated”属性发生更改。然后在“数据”数组中创建一个新元素,并插入该值数组

我已尝试使用findOneAndUpdate()(“my_obj”包含更新时可能具有不同内容的查询数据)

过滤器:
{name:my_obj.name}
//成功找到文档

更新:
{data:{lastUpdated:my_obj.lastUpdated,$addToSet:{values:my_obj.uuid}}

选项:
{upsert:true,new:true}

这个查询是我能找到的最接近的查询,但我收到一个错误“MongoError:data.0中以美元($)为前缀的字段“$addToSet”。$addToSet”对存储无效”,这完全有道理,但我似乎不知道如何使它工作

如果它起作用会是什么样子的示例:

name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple"] 
  }
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  }
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  },
  {
    lastUpdated: 890,
    values: ["bannana", "kiwi"]
  }
]
我的当前文档:

name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple"] 
  }
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  }
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  },
  {
    lastUpdated: 890,
    values: ["bannana", "kiwi"]
  }
]
让我们插入两个最新更新值为567的水果:

name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple"] 
  }
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  }
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  },
  {
    lastUpdated: 890,
    values: ["bannana", "kiwi"]
  }
]
这就是我们的文档现在的样子:

name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple"] 
  }
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  }
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  },
  {
    lastUpdated: 890,
    values: ["bannana", "kiwi"]
  }
]
接下来,我们插入相同的两个水果,但最后更新的值不同:

name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple"] 
  }
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  }
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  },
  {
    lastUpdated: 890,
    values: ["bannana", "kiwi"]
  }
]
结果是创建一个新对象(使用新的lastUpdated值),其中包含水果:

name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple"] 
  }
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  }
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
  { 
    lastUpdated: 567,
    values: ["orange", "apple", "bannana", "kiwi"] 
  },
  {
    lastUpdated: 890,
    values: ["bannana", "kiwi"]
  }
]
我可以用一个简单的查询来完成吗?还是集合?或者我需要使用自定义代码来迭代数据元素吗