无法在MongoDB中插入多个条目

时间:2017-05-22 03:37:32

标签: node.js mongodb mongoose mongoose-schema

这是我的架构。 user_id和other_id应该是唯一的(复合的)。

var mongoose = require("mongoose");
var uniqueValidator = require('mongoose-unique-validator');

var Schema = mongoose.Schema;

var FriendshipSchema = new Schema({

  user_id: {
    type: String,
    default: "",  
    trim: true,
unique:true,
  },
  other_id: {
    type: String,
    default: "",
unique:true,
  },

  status: {
    type: String,
    index: true,
    default: "none",
  },

});
FriendshipSchema.plugin(uniqueValidator);

module.exports =  mongoose.model('Friendship', FriendshipSchema)

这是我的服务器端代码。使用Mongoose非常直接插入。

app.post('/api/user/friendrequest', function(req, res){
var friendship = new Friendship(req.body);
console.log(req.body);

 Friendship.find({}, function (err, docs) {
        if (docs.length){
console.log('abac');
        }else{
            friendship.save(function(err){

            if (err)
            {
             console.log(err)
            }
            });
        }
    });
    });

我在控制台中收到此响应,但MongoDB中保存的条目不超过1个。我也删除了索引,它仍然无法正常工作。 btw'user_id'在另一个Collection中是唯一的。当我登录console.log(错误)时,我也没有收到任何错误。

{ user_id: 'google-oauth2|117175967810648931400',
  status: 'pending',
  other_id: 'facebook|10209430751350509' }
abac

以下是友谊集合的索引。

 db.friendships.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "kola.friendships"
        }
]

1 个答案:

答案 0 :(得分:1)

你想要的是字段的“组合”在这里是“独特的”而不是单独处理。

这意味着您的架构应该像这样定义:

var FriendshipSchema = new Schema({

  user_id: {
    type: String,
    default: "",  
    trim: true,
  },
  other_id: {
    type: String,
    default: "",
  },

  status: {
    type: String,
    index: true,
    default: "none",
  },

});

// Instead define the schema level index here
FriendshipShema.index({ "user_id": 1, "other_id": 1 },{ "unique": true });

module.exports =  mongoose.model('Friendship', FriendshipSchema);

最好的部分是你不需要任何插件来支持你想做的事情。

请确保在集合上运行.dropIndexes()以删除任何会影响正确操作的“唯一”索引。

另请参阅核心文档中的.createindex()"Unique Indexes"以获取更多信息。