如何知道数据已保存的模型数?有一种方法Model.count(),但似乎没有用.
var db = mongoose.connect('mongodb://localhost/myApp');
var userSchema = new Schema({name:String,password:String});
userModel =db.model('UserList',userSchema);
var userCount = userModel.count('name');
Run Code Online (Sandbox Code Playgroud)
userCount是一个对象,哪个方法调用才能得到真实count?
谢谢
我有一个问题,我以前没有看到Mongoose findByIdAndUpdate没有在回调中返回正确的模型.
这是代码:
var id = args._id;
var updateObj = {updatedDate: Date.now()};
_.extend(updateObj, args);
Model.findByIdAndUpdate(id, updateObj, function(err, model) {
if (err) {
logger.error(modelString +':edit' + modelString +' - ' + err.message);
self.emit('item:failure', 'Failed to edit ' + modelString);
return;
}
self.emit('item:success', model);
});
Run Code Online (Sandbox Code Playgroud)
db中的原始文档如下所示:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
Run Code Online (Sandbox Code Playgroud)
updateObj进入如下:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
Run Code Online (Sandbox Code Playgroud)
从回调返回的模型与原始模型相同,而不是updatedObj.如果我查询数据库,它已被正确更新.它只是没有从数据库返回.
这感觉就像一个'愚蠢的用户'错误,但我看不到它.任何想法都非常感激.
我正在使用Mongoose Library通过node.js访问MongoDB
有没有办法从文档中删除密钥?即不只是将值设置为null,但删除它?
User.findOne({}, function(err, user){
//correctly sets the key to null... but it's still present in the document
user.key_to_delete = null;
// doesn't seem to have any effect
delete user.key_to_delete;
user.save();
});
Run Code Online (Sandbox Code Playgroud) 我试图找到关于如何在Mongoosejs中创建多字段索引的文档,但无济于事.特别是我有两个需要索引和唯一的字段.什么是将两个字段索引在一起的示例mongoose模式?
我不能手动或自动填充新保存的对象上的创建者字段...我能找到的唯一方法是重新查询我已经拥有的我不想做的对象.
这是设置:
var userSchema = new mongoose.Schema({
name: String,
});
var User = db.model('User', userSchema);
var bookSchema = new mongoose.Schema({
_creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
description: String,
});
var Book = db.model('Book', bookSchema);
Run Code Online (Sandbox Code Playgroud)
这是我拉我的头发的地方
var user = new User();
user.save(function(err) {
var book = new Book({
_creator: user,
});
book.save(function(err){
console.log(book._creator); // is just an object id
book._creator = user; // still only attaches the object id due to Mongoose magic
console.log(book._creator); // Again: is just an object …Run Code Online (Sandbox Code Playgroud) 使用nodejs和express,我想使用JSON返回一个或多个对象(数组).在下面的代码中,我一次输出一个JSON对象.它有效,但这不是我想要的.由于我有很多对象,因此生成的响应不是有效的JSON响应.
我很清楚我可以简单地将所有对象添加到数组中并在res.end中返回该特定数组.但是,我担心这会对处理和内存密集而变得沉重.
用nodejs实现这个的正确方法是什么?query.each是正确的调用方法吗?
app.get('/users/:email/messages/unread', function(req, res, next) {
var query = MessageInfo
.find({ $and: [ { 'email': req.params.email }, { 'hasBeenRead': false } ] });
res.writeHead(200, { 'Content-Type': 'application/json' });
query.each(function(err, msg) {
if (msg) {
res.write(JSON.stringify({ msgId: msg.fileName }));
} else {
res.end();
}
});
});
Run Code Online (Sandbox Code Playgroud) 我试图使用Mongoose发送所有用户的列表,如下所示:
server.get('/usersList', function(req, res) {
var users = {};
User.find({}, function (err, user) {
users[user._id] = user;
});
res.send(users);
});
Run Code Online (Sandbox Code Playgroud)
当然,res.send(users);要发送{},这不是我想要的.有没有一种find语义略有不同的替代方案,我可以做以下事情?
server.get('/usersList', function(req, res) {
User.find({}, function (err, users) {
res.send(users);
});
});
Run Code Online (Sandbox Code Playgroud)
本质上,我希望只有在从数据库中提取所有用户时才执行回调.
不确定我做错了什么,这是我的check.js
var db = mongoose.createConnection('localhost', 'event-db');
db.on('error', console.error.bind(console, 'connection error:'));
var a1= db.once('open',function(){
var user = mongoose.model('users',{
name:String,
email:String,
password:String,
phone:Number,
_enabled:Boolean
});
user.find({},{},function (err, users) {
mongoose.connection.close();
console.log("Username supplied"+username);
//doSomethingHere })
});
Run Code Online (Sandbox Code Playgroud)
这是我的insert.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/event-db')
var user = mongoose.model('users',{
name:String,
email:String,
password: String,
phone:Number,
_enabled:Boolean
});
var new_user = new user({
name:req.body.name,
email: req.body.email,
password: req.body.password,
phone: req.body.phone,
_enabled:false
});
new_user.save(function(err){
if(err) console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
每当我试图运行check.js时,我都会收到此错误
编译后无法覆盖'用户'模型.
我知道这个错误是由于Schema不匹配造成的,但我看不出这是怎么回事?我对mongoose和nodeJS很新.
以下是我从MongoDB的客户端界面获取的内容:
MongoDB shell version: 2.4.6 connecting to: test …Run Code Online (Sandbox Code Playgroud) 我遇到了一段包含查询findOne然后是exec()函数的Mongoose代码.
我以前从未在Javascript中看过那种方法?它究竟做了什么?
我想在Monoose中将两个OR查询与AND组合在一起,就像在这个SQL语句中一样:
SELECT * FROM ... WHERE (a = 1 OR b = 1) AND (c=1 OR d=1)
Run Code Online (Sandbox Code Playgroud)
我在NodeJS模块中尝试了这个,它只从主应用程序中获取模型对象:
/********** Main application ***********/
var query = MyModel.find({});
myModule1.addCondition(query);
myModule2.addCondition(query);
query.exec(...)
/************ myModule1 ***************/
exports.addCondition = function(query) {
query.or({a: 1}, {b: 1});
}
/************ myModule2 ***************/
exports.addCondition = function(query) {
query.or({c: 1}, {d: 1});
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,所有OR条件将像在此SQL语句中一样连接在一起:
SELECT * FROM ... WHERE a = 1 OR b = 1 OR c=1 OR d=1
Run Code Online (Sandbox Code Playgroud)
如何在Mongoose中结合AND myModule1和myModule2AND 的两个条件?