我在node.js/mongoDB/mongoose上开始我的第一个测试应用程序,这是一个非常简单的应用程序,旨在创建数据库记录并检索它们.
我创建了一个模型:
var Car = new Schema({
brand : String,
speed : Number,
date : { type: Date, default: Date.now }
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,除了我希望能够为速度而不是整数提供浮点值.我尝试了Decimal和Float,但没有一个正在工作.我也没有在文档中找到.
任何的想法 ?
如果存在则如何更新否则在javascript/node.js中插入新文档?我得到函数字典的参数,如果字典包含_id应该更新,否则在远程服务器上插入(我通过mongoose与远程服务器连接,我有要插入/更新的Person模式).
以下是可以通过mongo终端设置集合的到期时间(TTL)的命令:
db.log.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )
Run Code Online (Sandbox Code Playgroud)
如何使用mongoose从Node.js中的代码执行此操作?
阅读Mongoose文档我有点困惑.
如果我运行猫鼬其中没有匹配的文档集合中的查询,什么都值err,并results在回调函数callback(err, results)?我只是不知道Mongoose认为是什么"错误".作为一名数学家,返回空集(即results数组为空)似乎完全有效,不应该是"错误" - 查询执行正常,没有匹配的文档.另一方面,有些人可能认为这是"错误".来自mongoose docs,要么:
err= null,results= []err= null,results= nullerr=错误文档,results= null这个错误来自哪里?我没有在任何地方使用ensureIndex或createIndex在我的Nodejs应用程序中.我正在使用纱线包经理.
这是我的代码 index.js
import express from 'express';
import path from 'path';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import Promise from 'bluebird';
dotenv.config();
mongoose.Promise = Promise;
mongoose.connect('mongodb://localhost:27017/bookworm', { useNewUrlParser: true });
const app = express();
Run Code Online (Sandbox Code Playgroud) 我将一些数据存储在mongodb中并使用js/nodejs和mongoose访问它.我可以使用.find()来查找数据库中的内容,这不是问题.问题是如果没有什么,我想做别的事.目前这正是我正在尝试的:
UserModel.find({ nick: act.params }, function (err, users) {
if (err) { console.log(err) };
users.forEach(function (user) {
if (user.nick === null) {
console.log('null');
} else if (user.nick === undefined) {
console.log('undefined');
} else if (user.nick === '') {
console.log('empty');
} else {
console.log(user.nick);
}
});
});
Run Code Online (Sandbox Code Playgroud)
当我做一些act.params不会出现在缺口索引中时,这些都不会触发.当发生这种情况时,我根本没有得到任何控制台,但我确实让user.nick在实际存在的情况下正常登录.我只是试着反过来这样做:
UserModel.find({ nick: act.params }, function (err, users) {
if (err) { console.log('noooope') };
users.forEach(function (user) {
if (user.nick !== '') {
console.log('null');
} else {
console.log('nope');
}
});
});
Run Code Online (Sandbox Code Playgroud)
但这仍然没有记录nope.我在这里错过了什么?
如果它没有找到它,它只是跳过查找调用中的所有内容,这很好,除非我之后需要做的事情,如果它不存在我不想做的话.:/
Mongoose在Schema中添加了一个'__v'属性用于版本控制 - 是否可以全局禁用它或全局隐藏所有查询?
我想使用mongoose自定义验证来验证endDate是否大于startDate.如何访问startDate值?使用this.startDate时,它不起作用; 我得到了不确定.
var a = new Schema({
startDate: Date,
endDate: Date
});
var A = mongoose.model('A', a);
A.schema.path('endDate').validate(function (value) {
return diff(this.startDate, value) >= 0;
}, 'End Date must be greater than Start Date');
Run Code Online (Sandbox Code Playgroud)
diff 是一个比较两个日期的函数.
我正在尝试通过mongoose将我的节点应用程序连接到mongodb.它似乎正在工作,因为我可以添加文档,但我得到错误{ [Error: Trying to open unclosed connection.] state: 2 }.
我创建了一个非常简单的应用程序,只是为了确保在连接我的实际应用程序之前一切正常.
这是我的简单应用程序:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var timeSchema = new Schema({ timestamp: String });
var Time = mongoose.model('Time', timeSchema);
mongoose.connect('mongodb://localhost/mydb');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', function () {
var testA = new Test({ timestamp: Date() });
});
Run Code Online (Sandbox Code Playgroud)
我也试过添加db.close()到最后,但它没有任何区别.
这是在Ubuntu 14.04 VPS上运行的:
我正在使用猫鼬findOneAndUpdate但仍然得到错误,
DeprecationWarning:不推荐使用collection.findAndModify.请改用findOneAndUpdate,findOneAndReplace或findOneAndDelete.
但我甚至没有使用findAndModify,为什么它将我的查询转换为findAndModify?