- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
mongodb Dog.find() 在 Dog.create() 之前执行
我只是遇到了一些我无法理解的问题以及为什么会发生。我刚刚开始通过在线教程学习 mongodb。我在 cloud9 练习我的代码。我正在练习基本查询,例如 find() 和 create()。我首先通过添加一个仅带有名称参数的新狗来添加 Dog.create() 方法,然后在 create() 方法下面添加 Dog.find() 来查找数据库中存在的所有数据。
但问题是 Dog.find() 先执行,Dog.create 最后执行。
我已经发布了下面的代码。
var mongoose= require("mongoose");
mongoose.connect("mongodb://localhost/dog_app");
var dogSchema = new mongoose.Schema({
name:String
});
var Dog = mongoose.model("Dog", dogSchema);
Dog.create({
name:"duppy"
}, function(err, dog){
if(err){
console.log(err);
}else{
console.log("created a new dog");
console.log(dog);
}
});
Dog.find({}, function(err , dogs){
if(err){
console.log(err);
} else{
console.log("retrived from database");
console.log(dogs);
}
});
结果
adi188288:~/workspace/IntroToNode/Databases $ node dogs.js
(node:7113) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
retrived from database
[ { _id: 59bd6256bffba3198bce7e87, name: 'Puppy', __v: 0 } ]
created a new dog
{ __v: 0, name: 'Puppy2', _id: 59bd6932a2d4c81bc9488b74 }
您可以看到结果,首先执行 find 方法,然后发生 create 方法。有人可以向我解释一下吗?
最佳答案
您已经创建了竞争条件。这两个调用都是异步的,这意味着它们不会立即返回,它们必须等待数据库完成其操作。但是,您可以通过在同一时间点内并行执行这两个调用。
基本上,您的代码向 MongoDB 发送两个请求;一个是它创造了一只狗,另一个是寻找狗。 MongoDB 并行处理两者,并返回两者的结果。在这种情况下,find
调用花费的时间较少,因此它首先调用它的回调。
如果您希望其中一个在另一个之后执行,则必须将它们放入回调中。仅当异步操作完成后才会调用回调:
Dog.create({
name:"duppy"
}, function(err, dog){
if(err){
console.log(err);
}else{
console.log("created a new dog");
console.log(dog);
Dog.find({}, function(err , dogs){
if(err){
console.log(err);
} else{
console.log("retrived from database");
console.log(dogs);
}
});
}
});
您可能还想按照alexmac的建议使用promise。 :
Dog.create({
name:"duppy"
}).then(function(dog){
console.log("created a new dog");
console.log(dog);
return Dog.find({});
}).then(function(dogs){
console.log("retrived from database");
console.log(dogs);
});
或者您甚至可以使用async/await .
关于node.js - mongodb Dog.find() 在 Dog.create() 之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257027/
object a = new Dog(); 对比 Dog a = new Dog(); 在这两种情况下,a.GetType() 都会给出 Dog。两者都调用相同的构造函数(具有相同的层次结构)。 那你
如何将此 css 应用于移动元素文本“DOG DOG DOG”以覆盖 cat 图像? 我用chrome测试没问题 http://image.ohozaa.com/i/g53/BwHNe9.png 但在
为什么 && 运算符返回最后一个值(如果语句为真)? ("Dog" == ("Cat" || "Dog")) // false ("Dog" == (false || "Dog")) // true
这个问题已经有答案了: Can we omit parentheses when creating an object using the "new" operator? (6 个回答) 已关闭 9
mongodb Dog.find() 在 Dog.create() 之前执行 我只是遇到了一些我无法理解的问题以及为什么会发生。我刚刚开始通过在线教程学习 mongodb。我在 cloud9 练习我的
我不太确定为什么较大字符串(“cat”和“dog”)的答案不一致。我正在用链接列表和模板的使用做一些事情。我的好奇心促使我修改模板和函数重载。如果有人能解释发生了什么,我将不胜感激。谢谢你。 #inc
我有一个奇怪的异常,我不知道为什么。我在内存中有数据库中的列表,但是当我尝试访问 getter 或将实体保存在变量中时,它会引发异常。 这是实体: package model; import java
当我“打印”(狗)的大小时 char dog[1000];// i get size of 1000 char *dog = (char*)malloc(1000 * sizeof(char));//
我有一个类Animal , 及其子类 Dog .我有一个 List我想添加一些 List 的内容到 List .有没有比只投 List 更好的方法呢?到 List , 然后使用 AddRange ?
我在 Twitter 上找到了以下代码片段(查看帖子历史以获取来源)。 [5] pry(main)> Date.parse('3 Dogs') ArgumentError: invalid date
Dog是一个用于DNS查询的命令行工具,它的工作原理类似于dig。它具有丰富多彩的输出,支持DNS-over-TLS 和 DNS-over-HTTPS协议,并且可以输出JSON格式。 系统环境
我希望此代码使用 jQuery 更改 3 个 div 的类 maximum。 $(".cat, .dog").click(function() { var el = $(this);
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在尝试实现原始论文中的方法(Enhanced LocalTextureFeatureSetsforFace在困难光照条件下的识别,作者:Xiaoyang Tan 和 Bill Triggs)在 p
我正在阅读名为“Code Complete”的书。书中对“dog-tag field”有解释。 Use dog-tag fields to check for corrupted memory. A
我自己找不到问题!感谢您的帮助,当我将空结构传递给 getPets() 这是一个接口(interface)接收器时,我期待结构返回的空引用,但我得到了这个错误 **dog 没有实现宠物(说话的类型错误
代码是自动生成的,所以我无法通过添加 HTML 来添加类/id 等,所以我尝试使用 js 来执行此操作。我 chop 了内容,但基本上我想将类“dog1”添加到与 Dog 1 相关的行,将类“dog2
我在nodejs中创建了一个基本项目,但是当我提交数据时,它说无法发布api/dogs。 https://vfs.cloud9.us-east-2.amazonaws.com/vfs/3199fe30
如果 Dog 继承自 Animal。 我有一个动物 [],我碰巧知道它只包含狗。接触 Dog[] 的最快/最好方法是什么?我用过 new ArrayList(oldarray).ToArray(typ
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 已关闭6年。
我是一名优秀的程序员,十分优秀!