Javascript MongoDB-Mongoose查询findOneAndUpdate()不';t更新/复制数据库
我正在尝试保存和更新Web Api的结果,该结果包含多个数据数组以填充股票图表。每次我输入一个符号并单击“Get Quote”按钮时,它都应该从web api获取数据,并在数据库的子模式下保存/更新数据。我怎样才能用nodejs和mongoose做到这一点?这是我试过的代码 文件夹-Models-Stock.jsJavascript MongoDB-Mongoose查询findOneAndUpdate()不';t更新/复制数据库,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试保存和更新Web Api的结果,该结果包含多个数据数组以填充股票图表。每次我输入一个符号并单击“Get Quote”按钮时,它都应该从web api获取数据,并在数据库的子模式下保存/更新数据。我怎样才能用nodejs和mongoose做到这一点?这是我试过的代码 文件夹-Models-Stock.js const mongoose = require('mongoose') mongoose.Promise = global.Promise mongoose.connect('mon
const mongoose = require('mongoose')
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true })
const slug = require('slug')
const childSchemaData = new mongoose.Schema({
date: mongoose.Decimal128,
open: mongoose.Decimal128,
high: mongoose.Decimal128,
low: mongoose.Decimal128,
close: mongoose.Decimal128,
volume: mongoose.Decimal128
})
const parentSchemaSymbol = new mongoose.Schema({
symbol: {
type: String,
trim: true,
minlength: 2,
maxlength: 4,
required: 'Plese enter a valid symbol, min 2 characters and max 4'
},
// Array of subdocuments
data: [childSchemaData],
slug: String
});
//we have to PRE-save slug before save the parentSchemaSymbol into DB
parentSchemaSymbol.pre('save', function (next) {
if (!this.isModified('symbol')) {
next()//skip it
return//stop this function from running
}
this.slug = slug(this.symbol)
next()
//TODO make more resiliant soslug are unique
})
module.exports = mongoose.model('Stock', parentSchemaSymbol)
const mongoose = require('mongoose')
const axios = require('axios')
require('../models/Stock')
const parentSchemaSymbol = mongoose.model('Stock')
mongoose.Promise = global.Promise // Tell Mongoose to use ES6 promises
// Connect to our Database and handle any bad connections
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true })
mongoose.connection.on('error', (err) => {
console.error(`Instead of:
curValueSchema.findOneAndUpdate
控制器-webApiController.js
const mongoose = require('mongoose')
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true })
const slug = require('slug')
const childSchemaData = new mongoose.Schema({
date: mongoose.Decimal128,
open: mongoose.Decimal128,
high: mongoose.Decimal128,
low: mongoose.Decimal128,
close: mongoose.Decimal128,
volume: mongoose.Decimal128
})
const parentSchemaSymbol = new mongoose.Schema({
symbol: {
type: String,
trim: true,
minlength: 2,
maxlength: 4,
required: 'Plese enter a valid symbol, min 2 characters and max 4'
},
// Array of subdocuments
data: [childSchemaData],
slug: String
});
//we have to PRE-save slug before save the parentSchemaSymbol into DB
parentSchemaSymbol.pre('save', function (next) {
if (!this.isModified('symbol')) {
next()//skip it
return//stop this function from running
}
this.slug = slug(this.symbol)
next()
//TODO make more resiliant soslug are unique
})
module.exports = mongoose.model('Stock', parentSchemaSymbol)
const mongoose = require('mongoose')
const axios = require('axios')
require('../models/Stock')
const parentSchemaSymbol = mongoose.model('Stock')
mongoose.Promise = global.Promise // Tell Mongoose to use ES6 promises
// Connect to our Database and handle any bad connections
mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true })
mongoose.connection.on('error', (err) => {
console.error(`Instead of:
curValueSchema.findOneAndUpdate
const mongoose=require('mongoose'))
常量axios=require('axios')
需要(“../models/Stock”)
const parentSchemaSymbol=mongoose.model('Stock')
mongoose.Promise=global.Promise//告诉mongoose使用ES6承诺
//连接到我们的数据库并处理任何错误连接
猫鼬mongodb://localhost:27017/myapp“,{useNewUrlParser:true})
mongoose.connection.on('error',(err)=>{
控制台。错误(`而不是:
parentSchemaSymbol.findOneAndUpdate
做:
而不是:
parentSchemaSymbol.findOneAndUpdate
做:
这是模型的方法,不是实例。
将实例名称替换为方案名称。这是模型的方法,而不是实例。
将实例名称替换为方案名称
findOneAndUpdate和update是一个模型方法,它可用于模型实例,所以您得到的方法是NotFound错误
let curValueSchema=new parentSchemaSymbol()
curValueSchema.symbol=曲线值
highLow.map(项=>{
curValueSchema.data.push(项)
})
常量查询={
符号:`${
curValue.toUpperCase()
}`
}
const update=curValueSchema
常量选项={
厄普塞特:没错,
新:真的
}
parentSchemaSymbol.findOneAndUpdate(查询、更新、选项)。然后(doc=>{
console.log('保存符号',doc)
返回res.send(高低)
}).
捕获(e=>{
控制台日志(e)
})
findOneAndUpdate和update是一个模型方法,它可用于模型实例,所以您得到的方法是NotFound错误
let curValueSchema=new parentSchemaSymbol()
curValueSchema.symbol=曲线值
highLow.map(项=>{
curValueSchema.data.push(项)
})
常量查询={
符号:`${
curValue.toUpperCase()
}`
}
const update=curValueSchema
常量选项={
厄普塞特:没错,
新:真的
}
parentSchemaSymbol.findOneAndUpdate(查询、更新、选项)。然后(doc=>{
console.log('保存符号',doc)
返回res.send(高低)
}).
捕获(e=>{
控制台日志(e)
})
Aha,这是有道理的。但出于同样的原因,它没有像预期的那样工作。它正在插入dumplicate值,而pre('save')
不工作。另外const query={symbol:`${curValue.toUpperCase()}}
不应用toUpperCase()
以避免我需要添加的重复“\u id”:false
对于子模式和父模式,它是有意义的。但出于同样的原因,它没有按预期工作。它正在插入dumplicate值,并且pre('save')
不工作。另外const query={symbol:`${curValue.toUpperCase()}`
不适用toUpperCase()
为了避免重复,我需要向子模式和父模式添加“\u id”:false
,它是有意义的。但出于同样的原因,它没有按预期工作。它正在插入dumplicate值,而pre('save')不起作用。另外,const query={symbol:${curValue.toUpperCase()}
}不适用于toUpperCase()为了避免重复,我需要向子模式和父模式添加“\u id”:false
,这很有意义。但出于同样的原因,它不能像预期的那样工作。它正在插入dumplicate值,而pre('save')不起作用。另外,const query={symbol:${curValue.toupercase()
}不适用于toupercase()为了避免重复,我需要向子模式和父模式添加“\u id”:false
,这很有意义。但出于同样的原因,它不能像预期的那样工作。它正在插入dumplicate值,而pre('save')不起作用。另外,const query={symbol:${curValue.toupercase()
}不适用于toupercase()为了避免重复,我需要向子模式和父模式添加“\u id”:false
,这很有意义。但出于同样的原因,它不能像预期的那样工作。它正在插入dumplicate值,而pre('save')不起作用。另外,const query={symbol:${curValue.toupercase()
}不适用于toupercase()为了避免重复,我需要向子模式和父模式添加“\u id”:false