我有这样的文件。
[{
"_id" : ObjectId("aaa"),
"host": "host1",
"artData": [
{
"aid": "56004721",
"accessMin": NumberLong(1481862180
},
{
"aid": "56010082",
"accessMin": NumberLong(1481861880)
},
{
"aid": "55998802",
"accessMin": NumberLong(1481861880)
}
]
},
{
"_id" : ObjectId("bbb"),
"host": "host2",
"artData": [
{
"aid": "55922560",
"accessMin": NumberLong(1481862000)
},
{
"aid": "55922558",
"accessMin": NumberLong(1481861880)
},
{
"aid": "55940094",
"accessMin": NumberLong(1481861760)
}
]
}]
在更新任何文档时,不应在数组中再次添加重复的“aid”。 我得到的一个选项是在artData.aid字段上使用唯一索引。但建设索引不是首选,因为我不需要它根据要求。 有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
选项1:在为该文档设计Schema时使用unique:true
。
例如:
var newSchema = new Schema({
artData: [
{
aid: { type: String, unique: true },
accessMin: Number
}]
});
module.exports = mongoose.model('newSchema', newSchema );
答案 1 :(得分:0)
根据this doc,您可以使用多键索引,如下所示:
{ "artData.aid": 1 }
话虽如此,因为你不想要使用多键索引,插入的另一个选择是
artData's
aid
理想情况下,您从步骤1开始的查询不会返回太大的集合 - 这使得操作速度惊人。也就是说,它实际上是基于您假设将尝试插入的重复数量。如果数字真的很高,那么步骤1中的查询结果可能会返回一大组项目,在这种情况下,这个解决方案可能不合适,但我得到的就是你所有的东西=(。
我的建议是真正重新评估不使用多键索引的原因