标签: mongoose

查找包含特定值的数组的文档

如果我有这个架构......

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中没有,只是在了解解决方案之前解释我期望找到的内容)

mongoose mongodb

456
推荐指数
7
解决办法
43万
查看次数

查找数组字段不为空的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 mongodb

444
推荐指数
9
解决办法
27万
查看次数

如何在Mongoose中更新/插入文档?

也许是时候了,也许是我淹没在稀疏的文档中,而且无法绕过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)

现在我们解决了这个问题:

  1. 如果我打电话,contact.save(function(err){...})如果有相同电话号码的联系人已经存在,我将收到错误(正如预期的那样 - 唯一)
  2. 我不能打电话update()给联系人,因为文件上不存在该方法
  3. 如果我在模型上调用update:
    Contact.update({phone:request.phone}, contact, {upsert: true}, function(err{...})
    我进入了一些类型的无限循环,因为Mongoose更新实现显然不希望将对象作为第二个参数. …

javascript mongoose mongodb node.js

334
推荐指数
12
解决办法
38万
查看次数

Mongoose中的"__v"字段是什么

我正在使用2.2 Mongoose版本的版本3 MongoDB.我注意到一个__v字段已经开始出现在我的MongoDB文档中.它与版本控制有关吗?怎么用?

mongoose mongodb node.js

278
推荐指数
4
解决办法
11万
查看次数

Mongoose:findOneAndUpdate不返回更新的文档

以下是我的代码

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时仍然获得了原始数据.

mongoose mongodb node.js

229
推荐指数
9
解决办法
23万
查看次数

mongodb/mongoose findMany - 查找在数组中列出ID的所有文档

我有一个_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.

mongoose mongodb node.js

218
推荐指数
7
解决办法
14万
查看次数

通过将useNewUrlParser设置为true,避免"当前URL字符串解析器已弃用"警告

我有一个数据库包装类,它建立与某些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/mongodb3.0.18.它们都是最新的可用npm install.

解决方法

使用旧版本的mongodb驱动程序:

connect()

mongoose mongodb node.js express typescript

210
推荐指数
14
解决办法
22万
查看次数

如何在Node.js中使用Mongoose进行分页?

我正在用Node.js和mongoose编写一个webapp.如何对.find()通话中的结果进行分页?我想要一个与"LIMIT 50,100"SQL 相媲美的功能.

pagination mongoose mongodb node.js

206
推荐指数
16
解决办法
17万
查看次数

Mongodb mongoose中的E11000重复键错误索引

以下是模型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 mongodb node.js

197
推荐指数
8
解决办法
23万
查看次数

阻止Mongoose为子文档数组项创建_id属性

如果您有子文档数组,Mongoose会自动为每个数组创建ID.例:

{
    _id: "mainId"
    subDocArray: [
      {
        _id: "unwantedId",
        field: "value"
      },
      {
        _id: "unwantedId",
        field: "value"
      }
    ]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Mongoose不为数组中的对象创建id?

mongoose mongodb node.js subdocument

196
推荐指数
6
解决办法
6万
查看次数