我尝试过使用find并且findOne两者都没有返回文档.find是在返回一个空数组findOne被返回null.err在这两种情况下null也是如此.
这是我的联系:
function connectToDB(){
mongoose.connect("mongodb://localhost/test"); //i have also tried 127.0.0.1
db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function callback(){
console.log("CONNECTED");
});
};Run Code Online (Sandbox Code Playgroud)
这是我的架构:
var fileSchema = mongoose.Schema({
hash: String,
type: String,
extension: String,
size: String,
uploaded: {type:Date, default:(Date.now)},
expires: {type:Date, default:(Date.now()+oneDay)}
});
var Model = mongoose.model("Model", fileSchema);Run Code Online (Sandbox Code Playgroud)
我的查询在这里:
Model.find({},function(err, file) {
console.log(err)
console.log(file);
});Run Code Online (Sandbox Code Playgroud)
我可以将内容上传到数据库并通过RockMongo查看,但我无法在之后获取它们.这是我第一次使用MongoDB,所以我想我只是缺少一些基础知识.任何正确方向的推动都会很棒!
我有一个更新MongoDB中任何集合的文档的常用方法?
以下代码的文件名为Deleter.js
module.exports.MongooseDelete = function (schemaObj, ModelObject);
{
var ModelObj = new mongoose.Model("collectionName",schemaObj);
ModelObj.remove(ModelObject);
}
Run Code Online (Sandbox Code Playgroud)
并在我的主文件app.js中调用如下:
var ModObj = mongoose.model("schemaName", schemasObj);
var Model_instance = new ModObj();
var deleter = require('Deleter.js');
deleter.MongooseDelete(schemasObj,Model_instance);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
OverwriteModelError: Cannot overwrite `undefined` model once compiled.
at Mongoose.model (D:\Projects\MyPrjct\node_modules\mongoose\lib\index.js:4:13)
Run Code Online (Sandbox Code Playgroud)
我只接受第二次方法通话.如果有任何人有解决方案,请告诉我.
为什么我不能通过_id删除记录?
码:
db.collection('posts', function(err, collection) {
collection.remove({_id: '4d512b45cc9374271b00000f'});
});
Run Code Online (Sandbox Code Playgroud) 我正在使用mongoose使用Node.js,Express和MongoDB构建CRUD样式的REST服务.该服务将允许已经存在的Android应用程序的用户在线上载/同步其各个数据库的内容.
已有应用程序的数据模型使用UUID(用Java生成),它与较短的单调MongoDB样式_id字段冲突.因为数据模型已经存在并且填充了来自许多用户的数据,所以我无法将源数据转换为单调的MongoDB样式_id.这给我留下了两个我能想到的选择:1)使Mongo/Mongoose(或其他一些ODM)与完整的UUID而不是单调_ids或2)添加一个uuid字段除了mongoose模型该_id领域并与这种方法的陷阱作斗争.我试图选择#1选项并遇到ObjectID引用问题.
我最初偶然发现了mongoose-uuid,但不幸的是,这对我的用例没有用,因为它_id在创建新的Mongoose对象时覆盖了我明确设置的值.潜入插件代码,它假定一个对象是新的(通过调用检查Mongoose的.isNew值),然后_id用新的uuid 覆盖它.因为我需要在Mongo中创建新文档时保留原始uuid,所以此插件对我不起作用.
接下来,我发现了猫鼬的创造者Aaron Heckmann关于类似话题的帖子.这有帮助,但我现在遇到的问题是我不能让我的mongoose模式通过ObjectID相互引用,因为从技术上讲,它们现在使用String`_ids引用彼此.
架构示例:
var mongoose = require('mongoose');
var uuid = require('node-uuid');
var Schema = mongoose.Schema;
var trackPassSchema = new Schema({
_id: { type: String, default: function genUUID() {
uuid.v1()
}},
//Omitting other fields in snippet for simplicity
vehicle: [
{type: Schema.Types.ObjectId, required: true, ref: 'Vehicle'}
]
});
module.exports = mongoose.model('TrackPass', trackPassSchema);
Run Code Online (Sandbox Code Playgroud)
引用模式:
var mongoose = require('mongoose');
var uuid …Run Code Online (Sandbox Code Playgroud) 我正在研究pymongo,这是我的文件:
{
"_id": ObjectId("51211b57f07ddaa377000000"),
"assignments": {
"0": {
"0": {
"_id": ObjectId("5120dd7400a4453d58a0d0ec")
},
"1": {
"_id": ObjectId("5120dd8e00a4453d58a0d0ed")
},
"2": {
"_id": ObjectId("5120ddad00a4453d58a0d0ee")
}
}
},
"password": "my_passwd",
"username": "john"
}
Run Code Online (Sandbox Code Playgroud)
我想取消所有这些文档的"赋值"属性.我能够通过以下方式在mongo shell上实现此目的:
db.users.update({}, {$unset: {"assignments": 1}}, false, true)
Run Code Online (Sandbox Code Playgroud)
即,我将upsert和multi标志作为最后两个参数传递给用户集合上的更新函数函数.但是我用pymongo做了这个:
db.users.update({}, {"$unset": {"assignments": 1}}, False, True)
Run Code Online (Sandbox Code Playgroud)
但是python解释器抛出了如下错误:
File "notes/assignment.py", line 34, in <module>
db.users.update({}, {"$unset": {"assignments": 1}}, False, True)
File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 481, in update
check_keys, self.__uuid_subtype), safe)
File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 852, in _send_message
rv = self.__check_response_to_last_error(response)
File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 795, …Run Code Online (Sandbox Code Playgroud) 当我试图通过模型实例上的保存操作获得承诺.我收到错误:undefined is not a function
instance.save().exec().then(..)
Run Code Online (Sandbox Code Playgroud)
但是,如果我试图通过这样的模型获得承诺,那么它是有效的.
model.find(..).exec().then(..)
Run Code Online (Sandbox Code Playgroud)
没有办法获得保存行动的承诺.目前我只是通过回调来保存功能.但是,为了保持一致性,我希望以相同的方式执行所有数据库操作.
我有一个Nodejs API,它使用ssl和https,所以我试图在不同的服务器上使用它来使用express-js构建一个Web应用程序.
在发出GET请求时收到以下错误:
events.js:141
throw er; // Unhandled 'error' event
^
Error: unable to verify the first certificate
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:1017:38)
at emitNone (events.js:67:13)
at TLSSocket.emit (events.js:166:7)
at TLSSocket._init.ssl.onclienthello.ssl.oncertcb.TLSSocket._finishInit (_tls_wrap.js:582:8)
at TLSWrap.ssl.onclienthello.ssl.oncertcb.ssl.onnewsession.ssl.onhandshakedone (_tls_wrap.js:424:38)
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法,但没有成功:
添加require('ssl-root-cas').inject();并rejectUnauthorized: false,根据请求.
添加process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";我的主文件,这给了我一个Error: socket hang up
请求代码:
var service_bus = require('service_bus');
var error_engine = require('error_engine');
exports.get = function(call_back){
function request_service() {
require('ssl-root-cas').inject();
var end_point = {
host: "www.xxxx.com",
port: "4433",
path: "/api/xxx/xx/",
method: "GET", …Run Code Online (Sandbox Code Playgroud) 我正在写一个mongodb连接的应用程序,并在连接到服务器时像下面收到这样的警告:
Db.prototype.authenticate方法将不再在下一个主要版本3.x中可用,因为MongoDB 3.6将仅允许对admin数据库中的用户进行身份验证,并且将不再允许套接字上的多个凭据.请使用带有身份验证凭据的MongoClient.connect进行身份验证.
我的代码就像吼叫
import mongoose from 'mongoose';
import config from './config';
mongoose.connect(config.db.uri);
Run Code Online (Sandbox Code Playgroud)
在config.js
const config = {
name: 'API',
version: '0.0.1',
env: process.env.NODE_ENV || 'development',
port: process.env.PORT || 3000,
base_url: process.env.BASE_URL || 'http://localhost:3000',
db: {
uri: 'mongodb://admin:harry123@127.0.0.1:27017/ai?authSource=admin',
},
}
export default config;
Run Code Online (Sandbox Code Playgroud)
我使用的是Node v8.0.0和mongoose 4.10.5
async.each是作为异步数组迭代工作的吗?
async.eachSeries是否作为同步数组迭代工作?(它实际上等待响应)
我问这些是因为它们都有回调但async.each就像异步数组迭代一样对ex:
//This is traditional way to iterate an array with callback functions in node.js
//Is this same with async.each ? i want to know it actually.
for (var i = 0; i < data.length; i++) {
(function (i) {
request(data[i],function(body){
console.log(body)
});
})(i);
//if this codes and async.each are doing same things ,
//i know that async gives me an aert when all finished thats the difference.
Run Code Online (Sandbox Code Playgroud)