最近我开始在Nodejs上使用MongoDB和Mongoose.
当我使用带有$or条件和_id字段的Model.find方法时,Mongoose无法正常工作.
这不起作用:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果我删除'_id'部分,这就行了!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Run Code Online (Sandbox Code Playgroud)
而在MongoDB shell中,两者都能正常工作.
我正在Node.js和Mongoose中准备一个数据库创建脚本.如何检查数据库是否已存在,如果是,请使用Mongoose删除(删除)它?
我找不到用Mongoose放弃它的方法.
我试图只选择一个特定的字段
exports.someValue = function(req, res, next) {
//query with mongoose
var query = dbSchemas.SomeValue.find({}).select('name');
query.exec(function (err, someValue) {
if (err) return next(err);
res.send(someValue);
});
};
Run Code Online (Sandbox Code Playgroud)
但是在我的json响应中我也收到了_id,我的文档架构只有两个fiels,_id和name
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
Run Code Online (Sandbox Code Playgroud)
为什么???
我正在使用带有express + mongoose的节点并尝试将passport.js与restful api一起使用.
身份验证成功后我一直收到此异常(我在浏览器上看到了回调网址):
/Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419
throw err;
^
Error: passport.initialize() middleware not in use
at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30)
at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13)
at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25)
at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18)
at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24)
at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
at Promise.EventEmitter.emit (events.js:96:17)
at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)
at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13
Run Code Online (Sandbox Code Playgroud)
我已经读过,我应该放在app.use(passport.initialize());和app.use(passport.session());之前app.use(app.router);,这就是我所做的.这是我注册中间件的express.js:
var express = require('express'),
mongoStore = require('connect-mongo')(express),
flash = require('connect-flash'),
helpers = require('view-helpers');
module.exports = function (app, config, passport) {
app.set('showStackError', true);
// should be placed before express.static
app.use(express.compress({ …Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法强制一个唯一的集合条目,但只有当条目不为空时.e示例模式:
var UsersSchema = new Schema({
name : {type: String, trim: true, index: true, required: true},
email : {type: String, trim: true, index: true, unique: true}
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,'email'不是必需的,但如果保存'email',我想确保此条目是唯一的(在数据库级别).
空条目似乎得到值'null'所以每个条目都没有电子邮件与'unique'选项崩溃(如果有不同的用户没有电子邮件).
现在我正在应用程序级别上解决它,但是希望保存该数据库查询.
谢谢
当我尝试更改Mongoose Query返回的数据的任何部分时,它没有任何效果.
昨天我想用各种各样的_.clone()s,使用临时存储变量等来解决这个问题.最后,就在我疯了的时候,我找到了一个解决方案.所以我认为将来有人(fyuuuture!)可能有保存问题.
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q; //has no effect
if(++counter == len) {
res.send(data);
}
});
});
});
Run Code Online (Sandbox Code Playgroud) 希望执行以下查询:
Entrant
.find
enterDate : oneMonthAgo
confirmed : true
.where('pincode.length > 0')
.exec (err,entrants)->
Run Code Online (Sandbox Code Playgroud)
我正在做where子句吗?我想选择pincode不为null的文档.
我正在尝试使用我的自定义方法在猫鼬的顶部开发一个类,所以我用我自己的类扩展了猫鼬但是当我调用创建一个新的汽车方法时它可以工作但它的条带和错误,在这里我让你看看我想做什么.
我收到了这个警告
(node:3341) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
Run Code Online (Sandbox Code Playgroud)
在我之后
driver.createCar({
carName: 'jeep',
availableSeats: 4,
}, callback);
Run Code Online (Sandbox Code Playgroud)
driver是Driver类的一个实例
const carSchema = new Schema({
carName: String,
availableSeats: Number,
createdOn: { type: Date, default: Date.now },
});
const driverSchema = new Schema({
email: String,
name: String,
city: String,
phoneNumber: String,
cars: [carSchema],
userId: {
type: Schema.Types.ObjectId,
required: true,
},
createdOn: { type: Date, default: Date.now },
});
const DriverModel = mongoose.model('Driver', …Run Code Online (Sandbox Code Playgroud) 我喜欢通过查找名为value的用户在mongoDb中找到用户.问题:
username: 'peter'
Run Code Online (Sandbox Code Playgroud)
如果用户名是"彼得",或"彼得"......或类似的东西,我不会找到它.
所以我想像sql一样
SELECT * FROM users WHERE username LIKE 'peter'
Run Code Online (Sandbox Code Playgroud)
希望你们得到我要求的东西?
简短:mongoose.js/mongodb中的"字段LIKE值"