当前位置: 首页 > 面试题库 >

猫鼬复杂(异步)虚拟机

郭兴平
2023-03-14
问题内容

我有两种 猫鼬模式 ,如下所示:

var playerSchema = new mongoose.Schema({
    name: String,
    team_id: mongoose.Schema.Types.ObjectId
});
Players = mongoose.model('Players', playerSchema);

var teamSchema = new mongoose.Schema({
    name: String
});
Teams = mongoose.model('Teams', teamSchema);

当查询团队时,我还将获得 虚拟生成的小队

Teams.find({}, function(err, teams) {
  JSON.stringify(teams); /* => [{
      name: 'team-1',
      squad: [{ name: 'player-1' } , ...]
    }, ...] */
});

但是我 无法 使用virtuals 获得它,因为我需要一个 异步 调用

teamSchema.virtual('squad').get(function() {
  Players.find({ team_id: this._id }, function(err, players) {
    return players;
  });
}); // => undefined

实现此结果的最佳方法是什么?

谢谢!


问题答案:

这可能最好作为您添加到的实例方法来处理,teamSchema以便调用者可以提供回调以接收异步结果:

teamSchema.methods.getSquad = function(callback) {
  Players.find({ team_id: this._id }, callback);
});


 类似资料:
  • 问题内容: 我正在尝试编写一个猫鼬查询,以检索一组资产以及这些资产的最新交易。交易与资产在单独的集合中。 为此,我首先在资产模型中创建了一个虚拟数组,以将资产链接到事务。 然后,我在node.js表达控制器中使用.populate进行查询(请注意,硬编码的“限制:1”有时会变成N): 在我的测试系统中有3个资产,每个资产都有一堆交易,它会为前两个资产返回旧交易,而对于第三个资产则不返回任何交易。

  • 问题内容: 假设我有一些Schema,其中有一个像这样的虚拟字段 在查询中是否可以按虚拟字段对结果进行排序?就像是 当我尝试此操作时,结果很简单,无法排序… 问题答案: 您将无法按虚拟字段进行排序,因为它们没有存储到数据库中。 虚拟属性是很方便使用的属性,但不会持久存在于mongodb中。 http://mongoosejs.com/docs/2.7.x/docs/virtuals.html

  • 问题内容: 我试图摆脱使用Mongoose Promise与Node.js的async / await功能的束缚。调用我的函数时,我想保存该函数查询的员工列表。同时,内部的语句返回期望的查询,在内部的returns返回,表明我没有正确返回promise。 我对承诺完全陌生,以至于我没有正确理解范例……非常感谢您的帮助。 问题答案: 您需要这样做,否则您正在等待返回的函数。 当前,您正在等待非承诺,

  • 我正在尝试将数据库调用移出控制器,以清理并使其可测试。当它们在控制器中时,一切都会顺利进行。我将它们移出控制器,并添加了一个异步,以确保我们等待。否则,我将调用的中的函数。现在,一旦我使用async/await,控制器中的函数就会认为没有用户,因为它没有等待。 有几个关于异步等待的SO问题,但我没有找到一个解决我的问题。我确实验证了返回了我的用户,并添加了控制台日志来显示路径。 节点猫鼬异步等待似

  • 我对虚拟函数感到困惑。有人告诉我,父类中的虚拟意味着我可以在子类中覆盖它。但是,如果我省略父类中的虚拟,我仍然可以覆盖它。

  • 你在本地为项目创建了台虚拟机,在虚拟机上安装配置了可以运行网站的环境。没直接在自己电脑上搭建这个运行环境,是因为,你的网站最终要运行的服务器使用的操作系统,跟你平时用的电脑上的操作系统不一样,因为大部分服务器的操作系统都是 Linux 类型的。 现在你要让自己开发的网站应用运行在这个搭建在虚拟机上的环境上,但是你还需要一边开发,编辑网站应用,一边测试网站应用的运行。编辑网站应用的文件都是在安装在本