javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

node.js-猫鼬删除document和s中的数组元素

我的模型文档中有一个数组。 我想根据我提供的密钥删除该数组中的元素,然后更新MongoDB。 这可能吗?

这是我的尝试:

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var favorite = new Schema({
    cn: String,
    favorites: Array
});

module.exports = mongoose.model('Favorite', favorite, 'favorite');

exports.deleteFavorite = function (req, res, next) {
    if (req.params.callback !== null) {
        res.contentType = 'application/javascript';
    }
    Favorite.find({cn: req.params.name}, function (error, docs) {
        var records = {'records': docs};
        if (error) {
            process.stderr.write(error);
        }
        docs[0]._doc.favorites.remove({uid: req.params.deleteUid});

        Favorite.save(function (error, docs) {
            var records = {'records': docs};
            if (error) {
                process.stderr.write(error);
            }
            res.send(records);

            return next();
        });
    });
};

到目前为止,它可以找到文档,但是删除或保存仍然有效。

trans by 2020-02-14T13:59:21Z

mongodb-如何更新猫鼬中的多个文档

我发现以下脚本:

Device.find(function(err, devices) {
  devices.forEach(function(device) {
    device.cid = '';
    device.save();
  });
});

MongoDB具有“ multi”标志,用于更新多个文档,但是我无法使它与mongoose一起使用。 这还不被支持还是我做错了什么?

Device.update({}, {cid: ''}, false, true, function (err) {
  //...
});
trans by 2020-02-06T12:36:39Z

猫鼬填充包含以下对象的数组

我有一个Mongoose模式,其对象数组lists由对另一个集合的引用和数字的嵌套数组组成:

var Schema, exports, mongoose, schema;

mongoose = require("mongoose");

Schema = mongoose.Schema;

schema = new Schema({
  name: {
    type: String,
    required: true,
    unique: true,
    trim: true
  },
  lists: [
    {
      list: {
        type: Schema.ObjectId,
        require: true,
        ref: "List"
      },
      allocations: [
        {
          type: Number,
          required: true
        }
      ]
    }
  ],
  createdAt: {
    type: Date,
    "default": Date.now
  },
  updatedAt: {
    type: Date
  }
});

exports = module.exports = mongoose.model("Portfolio", schema);

但是,没有得到TypeError: Cannot read property 'ref' of undefined,我将无法使populate正常工作。我已经尝试了populate('list')populate('lists list'),但是我不是正确地调用事物,或者我的架构不正确。 如果我自己单独引用列表,则不会出现此问题:

lists: [
    {
        type: Schema.ObjectId,
        require: true,
        ref: "List"
    }
  ]

但我希望每个列表旁边都有分配数组。 我需要做些什么才能得到想要的行为?

trans by 2020-01-30T06:39:30Z

Mongoose.js:如何实现创建或更新?

我有一个请求,其中正文包含数据和_id

有什么更好的方法来实现代码,如果存在带有_id的记录并且将创建一个没有_id的记录,该代码将更新? 我的代码:

var obj = req.body;
Model.findById(obj._id, function(err, data){
    if (!data){
        var model = new Model(obj)
        model.save(function(err, data){
            res.send({method: 'create', error: err, data: data})
        })
    } else {
        Model.findByIdAndUpdate(obj._id, obj, function(){
            res.send({method: 'update', error: err, data: data})
        })
    }

我只是在想也许有更好的方法可以做到这一点。

trans by 2020-01-30T05:50:29Z

javascript-如何从猫鼬的集合中排除一个特定字段?

我有一个带Mongoose ODM(Mongoose 3.3.1)的NodeJS应用程序。 我想从集合中检索除1外的所有字段。例如:我有一个具有6个场的产品集合,我想选择除“ Image”外的所有场。 我使用了“排除”方法,但出现了错误。这是我的代码。

    var Query = models.Product.find();
    Query.exclude('title Image');

    if (req.params.id) {
        Query.where('_id', req.params.id);
    }


    Query.exec(function (err, product) {
        if (!err) {
            return res.send({ 'statusCode': 200, 'statusText': 'OK', 'data': product });
        } else {
            return res.send(500);
        }
    });

但这返回错误

Express
500 TypeError: Object #<Query> has no method 'exclude'.........

我也尝试了var Query = models.Product.find().exclude('title','Image');var Query = models.Product.find({}).exclude('title','Image');但得到了同样的错误。 如何从猫鼬的集合中排除一个/(两个)特定字段。

trans by 2020-01-29T15:44:14Z

node.js-MongoDB:输出“ id”而不是“ _id”

我正在使用猫鼬(节点),输出id而不是_id的最佳方法是什么?

trans by 2020-01-28T19:18:36Z

node.js-在单独的Modu中定义猫鼬模型

我想将Mongoose模型分开放在一个单独的文件中。 我试图这样做:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Material = new Schema({
    name                :    {type: String, index: true},
    id                  :    ObjectId,
    materialId          :    String,
    surcharge           :    String,
    colors              :    {
        colorName       :    String,
        colorId         :    String,
        surcharge       :    Number
    }
});

var SeatCover = new Schema({
    ItemName            :    {type: String, index: true},
    ItemId              :    ObjectId,
    Pattern             :    String,
    Categories          :    {
        year            :    {type: Number, index: true},
        make            :    {type: String, index: true},
        model           :    {type: String, index: true},
        body            :    {type: String, index: true}
    },
    Description         :    String,
    Specifications      :    String,
    Price               :    String,
    Cost                :    String,
    Pattern             :    String,
    ImageUrl            :    String,
    Materials           :    [Materials]
});

mongoose.connect('mongodb://127.0.0.1:27017/sc');

var Materials = mongoose.model('Materials', Material);
var SeatCovers = mongoose.model('SeatCover', SeatCover);

exports.Materials = Materials;
exports.SeatCovers = SeatCovers;

然后,我尝试使用如下模型:

var models = require('./models'); 

exports.populateMaterials = function(req, res){
    console.log("populateMaterials");
    for (var i = 0; i < materials.length; i++ ){
        var mat = new models.Materials();
        console.log(mat);
        mat.name = materials[i].variantName;
        mat.materialId = materials[i].itemNumberExtension;
        mat.surcharge = materials[i].priceOffset;
        for (var j = 0; j < materials[i].colors.length; j++){
            mat.colors.colorName = materials[i].colors[j].name;
            mat.colors.colorId = materials[i].colors[j].itemNumberExtension;
            mat.colors.surcharge = materials[i].colors[j].priceOffset;
        }
        mat.save(function(err){
            if(err){
                console.log(err);
            } else {
                console.log('success');
            }
        });
    }
    res.render('index', { title: 'Express' });
};

这是在单独模块中引用模型的合理方法吗?

trans by 2020-01-27T11:08:24Z

mongodb-将对象推入Mongoose中的数组架构

我有这个猫鼬的模式

var mongoose = require('mongoose');

var ContactSchema = module.exports = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  phone: {
    type: Number,
    required: true,
    index: {unique: true}
  },
  messages: [
  {
    title: {type: String, required: true},
    msg: {type: String, required: true}
  }]
}, {
    collection: 'contacts',
    safe: true
});

并尝试通过以下方式更新模型:

Contact.findById(id, function(err, info) {
    if (err) return res.send("contact create error: " + err);

    // add the message to the contacts messages
    Contact.update({_id: info._id}, {$push: {"messages": {title: title, msg: msg}}}, function(err, numAffected, rawResponse) {
      if (err) return res.send("contact addMsg error: " + err);
      console.log('The number of updated documents was %d', numAffected);
      console.log('The raw response from Mongo was ', rawResponse);

    });
  });

我不是在声明messages采取一系列对象吗?
错误:MongoError:无法将$ push / $ pushAll修饰符应用于非数组

有任何想法吗?

trans by 2020-01-27T00:26:28Z

如何使用Node.js,Express和Mongoose进行身份验证?

我已经通过使用nodejs + express制作了简单的nodejs应用程序。 现在,我要进行用户身份验证。 我想通过使用猫鼬来实现会话处理。你能举个例子吗?

trans by 2020-01-25T00:00:38Z

猫鼬:如何定义唯一的字段组合?

如果我有这样的架构:

var person = new Schema({
  firstName:  String,
  lastName: String,
});

我想确保只有一个具有相同的firstName和lastName的文档。

我该怎么做?

trans by 2020-01-23T23:12:52Z

node.js-猫鼬:CastError:在路径“ _id”处,值“ [object Object]”的强制转换为ObjectId失败

我是node.js的新手,所以我觉得这将是我忽略的愚蠢之举,但是我一直无法找到解决问题的答案。 我想做的是创建一个路径,该路径将创建一个新的子对象,将其添加到父对象的子对象数组中,然后将该子对象返回给请求者。 我遇到的问题是,如果我将字符串ID传递给findById,节点将崩溃

TypeError:对象{}没有方法“ cast”

如果我尝试传递一个ObjectId,我得到

CastError:在路径“ _id”处,值“ [object Object]”的转换为ObjectId失败

这是我的代码的粗略概述:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId; //Have also tried Schema.Types.ObjectId, mongoose.ObjectId

mongoose.connect('mongodb://user:password@server:port/database');

app.get('/myClass/:Id/childClass/create', function(request, result) {
  var id = new ObjectId(request.params.Id);
  MyClass.findById(id).exec( function(err, myClass) {
    if (err || !myClass) { result.send("error: " + err + "<br>" + JSON.stringify(id) || ("object '" + request.params.Id + "' not found: " + id)); return; }
    var child = ChildClass();
    myClass.Children.addToSet(child);
    myClass.save();
    result.send(child);
  });
});

如果我使用路径“ / myClass / 51c35e5ced18cb901d000001 / childClass / create”执行此代码,则这是代码的输出:

错误:CastError:在路径“ _id”中,值“ [object Object]”的转换为ObjectId失败   {“ path”:“ 51c35e5ced18cb901d000001”,“ instance”:“ ObjectID”,“ validators”:[],“ setters”:[],“ getters”:[],“ _ index”:null}

我尝试使用findOne并传入{_id:id},但这似乎正是findById所做的。 我尝试了其他站点上列出的ObjectId的不同类。 我试过像函数而不是构造函数那样调用ObjectId(),并且返回undefined。 在这一点上,我的想法不多了,似乎谷歌搜索一个答案似乎没有帮助。 关于我在做什么错的任何想法吗?

另外,就像我说的那样,我是node / Mongo / Mongoose / Express的新手,所以如果有更好的方法可以实现我的目标,请告诉我。 我感谢所有反馈。

编辑:

经过Peter Lyons的解决方法后,我用谷歌搜索了我遇到的另一个错误,并找到了findByIdAndUpdate,它可以按预期运行,并且完全符合我的期望。 我仍然不确定为什么findById和findOne会给我这样的问题,并且我很想知道(也许需要提交错误报告),所以我会在其他人有答案的情况下保持此状态。

trans by 2020-01-23T19:07:14Z

node.js-如何在猫鼬中将对象ID设置为数据类型

使用node.js,mongoHQ和mongoose上的mongodb。 我正在为类别设置架构。 我想将文档ObjectId用作我的categoryId。

var mongoose = require('mongoose');

var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;
var Schema_Category = new Schema({
    categoryId  : ObjectId,
    title       : String,
    sortIndex   : String
});

然后我跑

var Category = mongoose.model('Schema_Category');
var category = new Category();
category.title = "Bicycles";
category.sortIndex = "3";

category.save(function(err) {
  if (err) { throw err; }
  console.log('saved');
  mongoose.disconnect();     
});

请注意,我没有为categoryId提供值。 我假设猫鼬将使用该架构来生成它,但是文档具有通常的“ _id”而不是“ categoryId”。 我究竟做错了什么?

trans by 2020-01-20T03:47:31Z

javascript-如何获取在另一个mod中定义的猫鼬数据库架构

这是我的文件夹结构:

+-- express_example
|---- app.js
|---- models
|-------- songs.js
|-------- albums.js
|---- and another files of expressjs

我在Songs.js文件中的代码

var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var SongSchema = new Schema({
name: {type: String, default: 'songname'}
, link: {type: String, default: './data/train.mp3'}
, date: {type: Date, default: Date.now()}
, position: {type: Number, default: 0}
, weekOnChart: {type: Number, default: 0}
, listend: {type: Number, default: 0}
});

module.exports = mongoose.model('Song', SongSchema);

这是我在文件albums.js中的代码

var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var AlbumSchema = new Schema({
name: {type: String, default: 'songname'}
, thumbnail: {type:String, default: './images/U1.jpg'}
, date: {type: Date, default: Date.now()}
, songs: [SongSchema]
});

module.exports = mongoose.model('Album', AlbumSchema);


如何使Albums.js知道要定义的SongSchema

trans by 2020-01-16T17:48:21Z

node.js-如何设置useMongoClient(Mongoose 4.11.0)?

这是我用来连接数据库的代码:

private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
    return Mongoose.connect(databaseUri).then(() => {
        debug('Connected to MongoDB at %O', databaseUri);
        return Mongoose.connection;
    });
}

今天,我将Mongoose更新到版本4.11.0,并且在运行测试时收到此警告:

(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`

我找不到有关如何“设置useMongoClient”的任何信息。

你们知道怎么做吗?

trans by 2020-01-16T11:57:11Z

mongodb-从Mongoose Mod获取模式属性

我正在使用Mongoose.js创建具有模式的模型。

我有一个模型列表(很多),有时我想获取组成特定模型的属性/键。

有没有一种方法可以提取任何给定模型的属性模式?

例如,

var mySchema = module.exports = new Schema({
  SID: {
    type: Schema.Types.ObjectId
    //, required: true
  },
  teams: {
    type: [String]
  },
  hats: [{
    val: String,
    dt: Date
  }],
  shields: [{
    val: String,
    dt: Date
  }],
  shoes: [{
    val: String,
    dt: Date
  }]
}

);

是否可以拉出/识别模式[SID, hats, teams, shields, shoes]的属性?

trans by 2020-01-14T12:10:29Z

node.js-检查猫鼬连接状态而不创建新连接

我有一些测试-即超级测试-可以加载我的Express应用。 这个程序创建一个猫鼬的连接。 我想知道如何从测试中检查该连接的状态。

在app.js中

mongoose.connect(...)

在test.js中

console.log(mongoose.connection.readyState);

如何访问app.js连接? 如果我在test.js中使用相同的参数进行连接,会创建新连接还是寻找现有连接?

trans by 2020-01-08T04:33:35Z

node.js-猫鼬的“静态”方法与“实例”方法

我相信这个问题与此类似,但用语却有所不同。 从猫鼬4文档中:

我们也可以定义自己的自定义文档实例方法。

// define a schema
var animalSchema = new Schema({ name: String, type: String });

// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
}

现在,我们所有的动物实例都可以使用findSimilarTypes方法。

接着:

向模型添加静态方法也很简单。 继续我们的animalSchema:

// assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function (name, cb) {
  return this.find({ name: new RegExp(name, 'i') }, cb);
}

var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function (err, animals) {
  console.log(animals);
});

似乎通过静态方法,每个动物实例也都可以使用findByName方法。 架构中的staticsmethods对象是什么? 有什么区别,为什么我要一个使用另一个?

trans by 2019-12-31T01:25:31Z

Javascript-猫鼬打字稿方式...?

尝试在Typescript中实现Mongoose模型。 对Google的调查只揭示了一种混合方法(结合JS和TS)。 如果没有JS,如何以我比较幼稚的方式实现User类呢?

希望能够不带行李的IUserModel。

import {IUser} from './user.ts';
import {Document, Schema, Model} from 'mongoose';

// mixing in a couple of interfaces
interface IUserDocument extends IUser,  Document {}

// mongoose, why oh why '[String]' 
// TODO: investigate out why mongoose needs its own data types
let userSchema: Schema = new Schema({
  userName  : String,
  password  : String,
  firstName : String,
  lastName  : String,
  email     : String,
  activated : Boolean,
  roles     : [String]
});

// interface we want to code to?
export interface IUserModel extends Model<IUserDocument> {/* any custom methods here */}

// stumped here
export class User {
  constructor() {}
}
trans by 2019-12-30T04:02:44Z

mongodb-如何从find方法返回猫鼬结果?

我可以找到的用于渲染带有猫鼬结果的页面的所有内容都表示要这样做:

users.find({}, function(err, docs){
    res.render('profile/profile', {
        users:     docs
    });
});

我如何从查询中返回结果,更像这样?

var a_users = users.find({}); //non-working example

这样我就可以在页面上发布多个结果?

喜欢:

/* non working example */
var a_users    = users.find({});
var a_articles = articles.find({});

res.render('profile/profile', {
      users:    a_users
    , articles: a_articles
});

能做到吗?

trans by 2019-11-15T04:42:15Z

javascript-如何从文档中排除某些字段

我有以下简单架构:

 var userSchema = new Schema({
    name : String,
   age: Number,
   _creator: Schema.ObjectId
  });

  var User = mongoose.model('User',userSchema);

我想要做的是创建新文档并返回到客户端,但是我想从其中排除“创建者”字段:

app.post('/example.json', function (req, res) {
   var user = new User({name: 'John', age: 45, _creator: 'some ObjectId'});
   user.save(function (err) {
      if (err) throw err;

      res.json(200, {user: user});     // how to exclude the _creator field?
   });
});

最后,我要发送不带_creator字段的新创建的用户:

{
   name: 'John',
   age: 45
} 

是否可以在没有额外的发现请求的情况下作出选择?

附言:最好通过

trans by 2019-11-09T13:22:47Z

上一页 1 2 3 4 5 6 下一页 共6页