Tag: mongodb query

有条件的更新,取决于匹配的字段

假设我有一个文件集合,每个文档pipe理一个老师和一个学生之间的讨论: { _id, teacherId, studentId, teacherLastMessage, studentLastMessage } 我将得到3个参数的查询:一个_id ,一个userId和一个message 。 我正在寻找一种方法来更新teacherLastMessage字段或studentLastMessage字段取决于用户是哪一个。 目前,我有这个: return Promise.all([ // if user is teacher, set teacherLastMessage db.collection('discussions').findOneAndUpdate({ teacherId: userId, _id }, { $set: { teacherLastMessage: message } }, { returnOriginal: false }), // if user is student, set studentLastMessage db.collection('discussions').findOneAndUpdate({ studentId: userId, _id }, { $set: { studentLastMessage: message […]

在mongo中插入数组不会发生?

我是MongoDb的新手,我有一个关于数据插入的问题。 我用于'用户'集合的mongoose模式: var user = new mongoose.Schema({ username : {type: String}, email : {type: String,index: {unique: true}}, password : {type: String}, feed : [{ title : {type: String}, description : {type: String}, latitude : {type:Number}, longitude : {type:Number}, feedImages : [{ imageUrl: {type: String} }] }] }); 我想插入数据到feedimages和我的服务是: app.post('/uploadFeedImage',function(req,res) { var _id = req.body._id; var […]

查询MongoDb以从引用ID数组上的集合中获取计数

我共有3个集合:1.用户2.职位3.行动 我的collections看起来像这样: 用户: { "_id" : ObjectId("57ee65fef5a0c032877725db"), "fbId" : "EAAXZA4sZCZBKmgBAKe0JpJPrp7utWME6xbHT9yFD", "name" : "Aftab", "email" : "xxxe@hotmail.com", "gender" : "male", "__v" : NumberInt(0), "updatedAt" : ISODate("2016-10-10T05:11:35.344+0000"), "score" : NumberInt(90) } 动作: { "_id" : ObjectId("57f7a0ba3a603627658afdd3"), "updatedAt" : ISODate("2016-10-07T13:18:50.815+0000"), "createdAt" : ISODate("2016-10-07T13:18:50.815+0000"), "userId" : ObjectId("57ee65fef5a0c032877725db"), "postId" : ObjectId("57f4b5e98899081203883a1b"), "type" : "like" } { "_id" : ObjectId("57f7a0ba3a603627658afdd4"), "updatedAt" […]

Mongodb只有在匹配的组合不返回真的时候才能find并插入

我必须在行动集合中插入一个批处理,如下所示: [ { "userId": "57ee65fef5a0c032877725db", "postId": "57f63ce196b01748e4712ed3", "type": "like" }, { "userId": "57ee65fef5a0c032877725db", "postId": "57f7335223a76c0f780a44c5", "type": "dismiss" }, { "userId": "57ee65fef5a0c032877725db", "postId": "57f7335223a76c0f780a44c5", "type": "dislike" } ] 操作集合的模式如下所示: const ActionSchema = new mongoose.Schema({ userId: mongoose.Schema.Types.ObjectId, postId: mongoose.Schema.Types.ObjectId, type: String }, { timestamps: true }); 但在插入之前,我想确保这个数组中的这个特定的“userId”和“postId”在db的action collection中没有匹配的组合。 由于用户只能执行由其他用户发布的特定post的单个操作。

查询依赖数组大小与值匹配的文档

我有以下架构: Collection1 name slug Collection2 name slugCollection1 Collection1和Collection2之间的“连接”是通过字段slug和slugCollection1 。 我尝试使用MongoDB的聚合框架实现一个请求,以获取具有特定名称和Collection2types的依赖元素数量的Collection1所有元素。 我可以通过$project获得提示: [ { "$lookup": { "from": "Collection2", "localField": "slug", "foreignField": "slugCollection1", "as": "elements" } }, { "$project": { "_id": 0, "id": "$id", "name": 1, "slug": 1, "elementsNumber": { "$size": "$elements" } } } ] 但是我不能将elementsNumber字段稍后用于$match 。 我想这是因为它不是Collection1的字段部分。 有没有一种方法来实现这样的查询? 谢谢!

如何使用Mongoose Aggregation FrameWork对数组元素进行分组

我有以下Mongoose模式: EmployeeSchema: var EmployeeSchema = new Schema({ name : String, employeeDetailsId: { type: Schema.Types.ObjectId, ref: 'employeedetails' } }); EmployeeDetailSchema: var EmployeeDetailSchema = new Schema({ employeeId: { type: Schema.Types.ObjectId, ref: 'employee' }, statusId: { type: Schema.Types.ObjectId, ref: 'status' }, primarySkills: [ { type: Schema.Types.ObjectId, ref: 'skills' }] }); SkillsSchema: var SkillsSchema = new Schema({ name: { […]

用“$ arrayElemAt”投影返回的元素

如果我在这里混淆了一些术语,请原谅我,但是我正在使用'$ lookup'操作符在聚合中执行连接操作,如下所示: db.collection('items').aggregate([{$match: {}}, { $lookup: { from: 'usr', localField: 'usr._id', foreignField: '_id', as: '__usr' } }, { $project: { info: 1, timestamp: 1, usr: { "$arrayElemAt": [ "$__usr", 0 ] } } }], (err, result) => { res.json(result); db.close(); }); 我在聚合结果上执行投影,我使用'$ arrayElemAt'从结果数组中提取单个'usr'匹配。 出于显而易见的原因,我不想返回包含敏感信息的整个“usr”logging。 我正在做的是对使用'$ arrayElemAt'操作返回的元素执行投影。 我能够做到这一点的唯一方法是使用原始投影的额外投影,如下所示: db.collection('items').aggregate([{$match: {}}, { $lookup: { from: 'usr', localField: […]

如何通过mongoose中的模式属性进行过滤

我有一个group对象,它包含一个members属性。 members属性是一个对象数组。 该对象具有以下属性。 {"id" : "1", "status" : 1} 我的要求是获得给定group对象的状态为1的用户列表(通过给定的ID)。 这是可能做到的,用一个简单的ID查询和一个foreach 。 但是想知道,是否有任何提前查询来做到这一点。 我的整体组对象如下。 var UserSchema = new Schema({ user_id:{ type : Schema.ObjectId, ref : 'User', default : null }, status:{ type : Number, default : null /* 1 – pending | 2 – rejected | 3 – accepted*/ }, }); var GroupSchema = new […]

Mongo DB +与最后一个字段的数据

我有collections中的示例json数据。 样本数据: [{ "_id" : 1, "username" : "abcd", "createdDate" : ISODate("2016-06-03T08:52:32.434Z") }, { "_id" : 2, "username" : "abcd", "createdDate" : ISODate("2016-05-03T09:52:32.434Z") }, { "_id" : 3, "username" : "abcd", "createdDate" : ISODate("2016-04-03T10:52:32.434Z") }, { "_id" : 4, "username" : "xyz", "createdDate" : ISODate("2016-03-03T10:52:32.434Z") },{ "_id" : 5, "username" : "xyz", "createdDate" : ISODate("2016-02-03T10:52:32.434Z") […]

如何pipe理MongoDb集合中的大数据

我有一个称为数据的集合,它是每n秒钟从许多设备发送的所有文档的目的地。 在没有文档溢出的情况下,保持集合在生产环境中的最佳实践是什么? 我怎样才能“清理”collections并将内容保存到另一个? 这是正确的方法吗? 先谢谢你。