如果我有这个架构......
person = {
name : String,
favoriteFoods : Array
}
Run Code Online (Sandbox Code Playgroud)
... favoriteFoods数组中填充了字符串.我怎样才能找到所有使用猫鼬"寿司"作为他们最喜欢的食物的人?
我希望有类似的东西:
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
Run Code Online (Sandbox Code Playgroud)
(我知道$contains在mongodb中没有,只是在了解解决方案之前解释我期望找到的内容)
我的所有记录都有一个名为"图片"的字段.该字段是一个字符串数组.
我现在想要这个数组不为空的最新10条记录.
我已经google了一下,但奇怪的是我在这方面找不到多少.我已经阅读了$ where选项,但我想知道本机函数有多慢,以及是否有更好的解决方案.
即便如此,这不起作用:
ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()
Run Code Online (Sandbox Code Playgroud)
什么都不返回 离开this.pictures没有长度位确实有效,但当然它也返回空记录.
也许是时候了,也许是我淹没在稀疏的文档中,而且无法绕过Mongoose更新的概念:)
这是交易:
我有一个联系方案和模型(缩短属性):
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var mongooseTypes = require("mongoose-types"),
useTimestamps = mongooseTypes.useTimestamps;
var ContactSchema = new Schema({
phone: {
type: String,
index: {
unique: true,
dropDups: true
}
},
status: {
type: String,
lowercase: true,
trim: true,
default: 'on'
}
});
ContactSchema.plugin(useTimestamps);
var Contact = mongoose.model('Contact', ContactSchema);
Run Code Online (Sandbox Code Playgroud)
我收到客户的请求,其中包含我需要的字段,因此使用我的模型:
mongoose.connect(connectionString);
var contact = new Contact({
phone: request.phone,
status: request.status
});
Run Code Online (Sandbox Code Playgroud)
现在我们解决了这个问题:
contact.save(function(err){...})如果有相同电话号码的联系人已经存在,我将收到错误(正如预期的那样 - 唯一)update()给联系人,因为文件上不存在该方法Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})我正在使用2.2 Mongoose版本的版本3 MongoDB.我注意到一个__v字段已经开始出现在我的MongoDB文档中.它与版本控制有关吗?怎么用?
以下是我的代码
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', {
name: String,
age: {type: Number, default: 20},
create: {type: Date, default: Date.now}
});
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}},function(err, doc){
if(err){
console.log("Something wrong when updating data!");
}
console.log(doc);
});
Run Code Online (Sandbox Code Playgroud)
我已经在我的mongo数据库中有一些记录,我想运行此代码来更新年龄为17的名称,然后在代码末尾打印出结果.
但是,为什么我仍然从控制台获得相同的结果(不是修改后的名称),但是当我转到mongo db命令行并输入" db.cats.find();"时.结果来自修改后的名称.
然后我回去再次运行此代码并修改结果.
我的问题是:如果数据被修改,那么为什么我在第一次使用console.log时仍然获得了原始数据.
我有一个_ids数组,我想相应地获取所有文档,最好的方法是什么?
就像是 ...
// doesn't work ... of course ...
model.find({
'_id' : [
'4ed3ede8844f0f351100000c',
'4ed3f117a844e0471100000d',
'4ed3f18132f50c491100000e'
]
}, function(err, docs){
console.log(docs);
});
Run Code Online (Sandbox Code Playgroud)
该数组可能包含数百个_id.
我有一个数据库包装类,它建立与某些MongoDB实例的连接:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个警告:
(node:4833)DeprecationWarning:不推荐使用当前的URL字符串解析器,将来的版本将删除它.要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect.
该connect()方法接受一个MongoClientOptions实例作为第二个参数.但它没有一个叫做的属性useNewUrlParser.我还尝试在连接字符串中设置这些属性,如下所示:mongodb://127.0.0.1/my-db?useNewUrlParser=true但它对这些警告没有影响.
那么如何设置useNewUrlParser删除这些警告?这对我很重要,因为脚本应该以cron身份运行,而这些警告会导致垃圾邮件垃圾邮件.
我mongodb在版本中使用驱动程序3.1.0-beta4和相应的@types/mongodb包3.0.18.它们都是最新的可用npm install.
使用旧版本的mongodb驱动程序:
connect()
我正在用Node.js和mongoose编写一个webapp.如何对.find()通话中的结果进行分页?我想要一个与"LIMIT 50,100"SQL 相媲美的功能.
以下是模型user中的user.js模式 -
var userSchema = new mongoose.Schema({
local: {
name: { type: String },
email : { type: String, require: true, unique: true },
password: { type: String, require:true },
},
facebook: {
id : { type: String },
token : { type: String },
email : { type: String },
name : { type: String }
}
});
var User = mongoose.model('User',userSchema);
module.exports = User;
Run Code Online (Sandbox Code Playgroud)
这就是我在我的控制器中使用它的方式 -
var user = require('./../models/user.js');
Run Code Online (Sandbox Code Playgroud)
这就是我在db中保存它的方法 -
user({'local.email' : …Run Code Online (Sandbox Code Playgroud) 如果您有子文档数组,Mongoose会自动为每个数组创建ID.例:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉Mongoose不为数组中的对象创建id?
mongodb ×10
mongoose ×10
node.js ×8
express ×1
javascript ×1
pagination ×1
subdocument ×1
typescript ×1