我不能手动或自动填充新保存的对象上的创建者字段...我能找到的唯一方法是重新查询我已经拥有的我不想做的对象.
这是设置:
var userSchema = new mongoose.Schema({
name: String,
});
var User = db.model('User', userSchema);
var bookSchema = new mongoose.Schema({
_creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
description: String,
});
var Book = db.model('Book', bookSchema);
Run Code Online (Sandbox Code Playgroud)
这是我拉我的头发的地方
var user = new User();
user.save(function(err) {
var book = new Book({
_creator: user,
});
book.save(function(err){
console.log(book._creator); // is just an object id
book._creator = user; // still only attaches the object id due to Mongoose magic
console.log(book._creator); // Again: is just an object …Run Code Online (Sandbox Code Playgroud) 我正试图通过Node.js的async/await功能来使用Mongoose promises.当我的函数printEmployees被调用时,我想保存由orderEmployees函数查询的员工列表.同时,console.log语句内部orderEmployees返回预期的查询,返回的console.log内部,表明我没有正确地返回promise.printEmployeesundefined
我很容易接受承诺,以至于我没有正确理解范式......任何帮助都非常感激.
printEmployees: async(company) => {
var employees = await self.orderEmployees(company);
// SECOND CONSOLE.LOG
console.log(employees);
},
orderEmployees: (companyID) => {
User.find({company:companyID})
.exec()
.then((employees) => {
// FIRST CONSOLE.LOG
console.log(employees);
return employees;
})
.catch((err) => {
return 'error occured';
});
},
Run Code Online (Sandbox Code Playgroud) 最近几天我一直在学习 nodejs,我偶然发现了一些我找不到任何好的解释的东西。
基本上它exec与普通回调有关,即(err, res) => {},如下所示:
Product.find({}).exec((err, products) => {});
Product.find({}, (err, products) => {});
Run Code Online (Sandbox Code Playgroud)
我找到了更多使用 的示例exec,但是当我阅读有关内容时,我exec真的不明白为什么。他们似乎都在对我做同样的事情。
所以,我的问题是,我应该使用一个而不是另一个,如果是,为什么?
编辑:
只是为了清楚Product起见,是 MongoDB 模型/模式。像这样:
const Product = mongoose.model('Product', new Schema({
title: {type: String, default: ''},
description: {type: String, default: ''},
price: {type: Number, default: ''}
}));
Run Code Online (Sandbox Code Playgroud) 以下函数由async / await函数调用,因此我需要一个真正的Promise从Mongoose返回,因此每个文档和该SO线程都使用“ .exec()” 。
// where data is an array of documents
function insertNewResults(data) {
return Model.insertMany(data).exec();
}
Run Code Online (Sandbox Code Playgroud)
这样做给我以下错误:
TypeError:Model.insertMany(...)。exec不是insertNewResults的函数
如果删除exec(),我将能够插入Many,而不会出现任何问题。我使用exec()的其他查询似乎没有引发任何错误,这使它更加令人困惑。
有人可以解释为什么会这样吗?
编辑1:下面是我的模式代码
const mongoose = require('mongoose');
const schema = new mongoose.Schema({
date: { type: Date, required: true },
price: { type: Number, required: true },
result: { type: String, required: true }
}, { usePushEach: true });
schema.index(
{ date: -1 }
);
mongoose.model('Model', schema);
Run Code Online (Sandbox Code Playgroud) 我是 Node 的新编程人员,我被卡住了,因为我不明白 .find 和 .exec 之间的区别。这是我尝试运行的代码:
exports.getPopulatedUsers = async function(query){
var res = await users.find(query, function (err, docs) {
if(err) return err;
return docs;
});
return res; // **Work fine, res return docs**
}
Run Code Online (Sandbox Code Playgroud)
但是当用 .exec 执行时, res 是未定义的。
exports.getPopulatedUsers = async function(query){
var res = await users.find(query).exec(function (err, docs) {
if(err) return err;
return docs;
});
return res; // **ERROR, res is undefined **
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
有人可以向我解释为什么下面的代码返回audiences而不是返回一个空数组吗?
return Audience.find()
.exec((err, audiences) => {
if (err) return errorHandler.handle('audienceService', err);
return Promise.resolve([]);
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过ID在我的mongo数据库中查找记录
无论我使用findbyid(),findone(id,...),它都将返回null
这是我的代码。解决办法是什么?
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/Movie', {useNewUrlParser: true})
.then(() => console.log('Connected to Databse'))
.catch(err => console.err('Could not connect to MongoDB', err));
var ObjectId = require('mongodb').ObjectID;
const Schema = new mongoose.Schema({
name: String,
author: String,
tags: [String],
date: Date,
isPublished: Boolean,
price: Number
});
const Data = mongoose.model('Datas', Schema);
async function updateData(id){
const result = await Data.findById(id);
console.log(result);
}
updateData('5a6900fff467be65019a9001');
Run Code Online (Sandbox Code Playgroud) mongodb ×6
mongoose ×6
node.js ×5
asynchronous ×2
express ×2
javascript ×2
database ×1
es6-promise ×1
populate ×1
promise ×1