只有当匹配的组合没有返回真值时,Mongodb才会查找并插入

时间:2016-10-19 07:03:11

标签: node.js mongodb mongoose mongodb-query

我必须在 action 集合中插入一个批处理,如下所示:

[

  {

    "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中没有匹配的组合。由于用户只能针对特定帖子执行单个操作,并由其他用户发布。

3 个答案:

答案 0 :(得分:1)

'use strict';
var mongoose = require('mongoose');

var accountTypeSchema = new mongoose.Schema({
    name:{type:String, index: { unique: true }},
    created: {type: Date, default: Date.now()},
    deleted: {type: Number, default: 0}
});

module.exports = mongoose.model('AccountType', accountTypeSchema);

答案 1 :(得分:1)

Haroon你的问题不是自我解释,但我从你的场景中理解的是你需要一组独特的postId AND userId所以我认为你需要一个复合索引才能形成。如果方案错误,请告诉我

anySchema.index({field1: 1, field2: 1}, {unique: true});

对于你的情况,它将是

ActionSchema.index({postId: 1, userId: 1}, {unique: true});

它将确保您始终拥有一组独特的postId和userId

答案 2 :(得分:0)

你的意思是在给定的JSON中有一组唯一的postId,userId,没有postId,userId应该重复吗?