Tag: mongodb

如何find一个集合的子文档,并使用Mongoose / MongoDB进行更新?

我有一个像这样的基本文件: _id: fm393nrr, name: 'My Event' members: [{ user: 94iru134nf attending: 1 }, { user: er9fr94, attending: 0 }] 我将如何根据user更改会员? 例如,像这样的东西: var eventToFind = 'fm393nrr'; //usually retrieved by req.params var userToFind = 'er9fr94'; //usually retrieved by req.body.user Event.findOneAndUpdate({ _id: eventToFind }, { $set: {members.attending: {…..}} } ).exec(function(){….}); 在上面,我想设置er9fr94的成员attending 1.代码是非常closures的,但是是一个长时间的尝试。 之前从未使用过子文档/embedded式文档。

Mongo更新没有按预期工作

假设我有这个模型: var stuffSchema = new mongoose.Schema({ "id": 1, "cars": { "suv": [], "sports": [], "supercar": [{ "owner": "nick", "previousOwners": [ ObjectId("574e1bc0abfb4a180404b17f"), ObjectId("574e1bdeabfb4a180404b180"), ObjectId("574e1c4babfb4a180404b181"), ObjectId("574e1c67abfb4a180404b182"), ObjectId("574e23abd25baf340e678b2d"), ObjectId("574e241ec8caa3a81cc85ed5") ] }] } }); var Stuff = mongoose.model('Stuff', stuffSchema); 如果特定owner已经存在,我想添加一个previousOwners的owner ,并且如果特定owner不存在,则添加一个新的owner及其各自的previousOwner的owner 。 这是我的尝试: Stuff.update({ id: 1, 'cars.supercar.owner': 'olix' }, { $addToSet: { 'cars.supercar.$.previousOwners': ObjectId("574e241ec8caa3a81c893e73") } }, { $upsert: true […]

如何防止MongoDB副本集查询主要?

读操作只: 有没有办法有一个MongoDB的副本集,但为了在连接到的盒子上的MongoDB实例,是被查询的MongoDB? AWS负载平衡器后面有三个EC2实例。 在每个EC2实例上运行MongoDB,这是副本集的一部分。 我在nodeJS上有特定的端点,并按照如下方式连接到副本集 mongodb.MongoClient.connect('mongodb://1.1.1.1,2.2.2.2,3.3.3.3.', function (err, db) { if (err) { complete('{}'); } else { 我希望将查询的负载均匀地分布在我的MongoDB副本集的所有三个实例上,而不是默认地将所有查询路由到定义了我的主要MongoDB的EC2实例,因为这破坏了我的负载平衡器的点(这是平衡所有三个实例的查询负载)。 我的理解是,当连接到MongoDB副本集时,除非主实例closures,否则始终select主实例,因此每个辅助实例的目的只是作为备份。 在我的例子中,有些人会称之为HOT,COLD,COLD。 因为有两个实例永远不会被使用。 我希望有平均分配查询负载的原因,所以我的设置可以是WARM,WARM,WARM。 在将来当用户数量增加时,为了保持查询性能最佳,我可以在负载均衡器后面添加更多的EC2实例,以提高查询性能。 并且当数据增长的时候,这样一个单一的实例太慢了,不能及时返回数据,也就是当我将每个实例分割成其他的EC2实例的时候。 注意:我想每个EC2实例的源代码都是一样的。 我正在使用git,我想要轻松地将源代码推送到我的副本集中的每个实例。

使用MongooseJS填充文档,如果没有值

比方说,我有这样的User模型 var userSchema = new Schema({ username : String, email : String, project : {type : String, ref : "Project"} }); 和这样的User文档。 { "_id" : ObjectId("56df56c58a4d47c83bf41603"), "username" : "user1", "email" : "email@example.com", "project" : "", "__v" : 1 } 如果我做了以下,该页面从不加载。 User.findById("56df56c58a4d47c83bf41603").populate("project").exec() .then(function(userObj) { res.render('user', { user : userObj }); }); 它工作正常,如果有一个实际的ObjectID在那里,但不是当它是空白的。 有没有一种方法,我可以默认为null,如果没有ObjectID的值?

Mongoose:更新嵌套的文档数组

我的collections如下: "_id" : ObjectId("5751f7892ae95d601f40411d"), "doc" : [ { "org" : ObjectId("5751f7892ae95d601f40411c"), "action" : 0, "_id" : ObjectId("5751f7892ae95d601f40411e") }, { "org" : ObjectId("5751952cace204c507fad255"), "action" : 1, "_id" : ObjectId("575217ce341cf6512b8dff39") } ] 我想用org:5751952cace204c507fad255更新文档中的操作字段,所以action将等于2我知道这已经被多次回答,但它不适用于我 这是我尝试过但收集没有改变: Model.update( { "_id":ObjectId("5751f7892ae95d601f40411d"), "doc.org":ObjectId("5751952cace204c507fad255") }, { "$inc": { "doc.$.action": 1 } } )

在Mongoose子数组中查询对象

我有一个架构,看起来像这样: var LibrarySchema = new Schema({ id: String, contactNumber: String, collections: [{ id: String, description: String subCollections: [{ id: String, description: String, recentlyUpdated: Boolean }, { id: String, description: String, recentlyUpdated: Boolean }] }] }) module.exports = mongoose.model('Library', LibrarySchema); 所有的ID都是唯一的。 区域内可以有多个库(另一个数组)。 我的问题是,我将如何查询嵌套数组来获得所需的对象? 更确切地说,我将如何得到一个特定的subCollection对象,给定一个库ID,集合ID和subCollection ID。

mongoose返回不一致的结果

我在Mongoose中遇到一个奇怪的问题,涉及到查询。 当我运行下面的查询,我得到了可变数量的结果。 当在Mongo中查询时,我会得到一致的210结果,但通过Mongoose做同样的事情时通常会得到198-210的结果。 我试过查询有没有索引集。 任何build议可能会造成这将不胜感激。 客户模式: subscriptions: [ { renewal: { type: Boolean, default: false } } ] 询问 Customer.find({ "subscriptions.renewal": true }, {}, { timeout: false })

无法在查询中查找使用variables

我在NodeJS上的窗口上工作。 我使用下面的代码来检查login凭据。 它工作正常,直到我改变到Ubuntu 16.04 。 我build立了我的环境,现在variables不被视为string。 它从数据库返回空集。 如果我这样做,这个user_name:"some user name",password:"some password" ,它工作正常。 请帮忙。 我被卡住了:-(抱歉,如果它是一个noobtypes的错误:-) app.post('/login', function(req, res, next) { var N1 = req.body.N1; var N2 = req.body.N2; console.log(N1+N2);//Getting passed successfully MongoClient.connect(url, function(err, db) { if (err) { throw err; console.log("into connectivity error"); } console.log(N1); db.collection('col.login').find({user_name:N1,pass:N2}).toArray(function(err, result) { if (err) { throw err; } resultArray=result; try{ […]

确定用户在查询中的每个对象的权限?

我们正在devise一个协作软件数据库结构并使用MEAN堆栈,而我缺乏ACL权限的经验也提示了这个问题。 高层次,软件是供合作者和审计人员在项目中工作/查看任务的。 MongoDB中的“Project”实体/表用于pipe理ACL组。 每个项目都有一个用户指针的“Collaborator”数组和一个用户指针的“Auditor”数组。 Collaborators数组中的用户被添加到具有读/写访问权限的项目“Collaborator”ACL组中,Auditors数组中的用户被添加到只读的项目auditor acl组中。 在MongoDB中还有另一个名为“Task”的实体,每个任务都绑定到一个,只有一个项目。 一个项目可以有多个任务。 任务获取的项目添加到它的协作ACL组和审计员ACL组。 所有这一切都很好。 现在,用户Bob是项目A上的协作者,项目B上是审计者。如果Bob在数据库中查询任务,他将返回他可以读写的任务(项目A)以及他只能读取的任务(项目B)。 但是,前端如何知道哪些任务他有写权限,哪些只读? 因为前端仅需要在用户具有写入权限的任务旁边显示“编辑”button。 我在ACL权限中看到,我可以执行一个调用来检查用户是否对单个对象具有写权限,但是这是针对每个对象的,并且对于每个对象执行额外的调用将会影响性能,即使它是在服务器上完成之前发送初始查询响应。 我可以用“AND当前用户权限包含写入”这样的filter来查询mongo中的任务实体组吗? 或者如何处理?

获取错误“pipe道元素3不是对象错误”,而试图使用聚合查找和更新

我正在使用node js mongodb driver &试图更新文档中的object array内的对象数组。 文档集合的模式是这样的: 我想要的是 : 对于order no = 1 & items.qty=2 & tax rate = 25 ,将tax to "cst" & taxratetype to "flat"更新tax to "cst" & taxratetype to "flat" 。 我试过的: db.OrderInfo.aggregate( {$match:{"orderno":"1"}}, {$unwind:'$items'}, { $match: { 'items.qty' : 2} },function(err,result1){ if(err){ throw(err); }else{ indexes = result1[0].items.taxes.map(function(obj, index) { if(obj.taxrate == […]