相关疑难解决方法(0)

保存后,猫鼬会填充

我不能手动或自动填充新保存的对象上的创建者字段...我能找到的唯一方法是重新查询我已经拥有的我不想做的对象.

这是设置:

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)

populate mongoose mongodb node.js

82
推荐指数
6
解决办法
5万
查看次数

使用与异步/等待的mongoose promises

我正试图通过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)

javascript asynchronous node.js promise

24
推荐指数
2
解决办法
4万
查看次数

Nodejs - 普通回调与 exec

最近几天我一直在学习 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)

mongoose mongodb

5
推荐指数
1
解决办法
9908
查看次数

猫鼬insertMany()。exec()返回TypeError

以下函数由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)

database asynchronous mongoose mongodb node.js

5
推荐指数
1
解决办法
1045
查看次数

猫鼬查找与执行。如何返回值?

我是 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)

我究竟做错了什么?

mongoose mongodb node.js express

4
推荐指数
1
解决办法
5528
查看次数

Mongoose find().exec() 承诺问题

有人可以向我解释为什么下面的代码返回audiences而不是返回一个空数组吗?

return Audience.find()
  .exec((err, audiences) => {
    if (err) return errorHandler.handle('audienceService', err);

    return Promise.resolve([]);
  });
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb es6-promise

3
推荐指数
1
解决办法
6960
查看次数

猫鼬findbyid()返回null

我正在尝试通过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)

mongoose mongodb node.js express

1
推荐指数
2
解决办法
2681
查看次数