Node.js Sails.js&;MongoDB:重复的键错误索引

Node.js Sails.js&;MongoDB:重复的键错误索引,node.js,mongodb,sails.js,waterline,Node.js,Mongodb,Sails.js,Waterline,我正在使用Sails.js(0.9.8)和MongoDB(通过Sails-mongo适配器)创建一个页面集合,这些页面可以定位在树视图中。我想将页面的路径存储在UUID数组中 我的模型: module.exports = { schema: true, attributes: { uuid: { type: 'string', unique: true, required: true,

我正在使用Sails.js(0.9.8)和MongoDB(通过Sails-mongo适配器)创建一个页面集合,这些页面可以定位在树视图中。我想将页面的路径存储在UUID数组中

我的模型:

module.exports = {    
    schema: true,
    attributes: {
        uuid: {
            type: 'string',
            unique: true,
            required: true,
            uuidv4: true
        },
        name: {
            type: 'string',
            required: true,
            empty: false
        },
        path: {
            type: 'array',
            required: true,
            array: true
        }
    }
}
当我保存“根”页面时,它工作得很好(“路径”属性只有一项,因为它是根页面。以下是它在MongoDB中保存的内容:

{
    _id: ObjectId("52f853e9609fb6c0341bdfcc"),
    createdAt: ISODate("2014-02-10T04:22:01.828Z"),
    name: "Home Page",
    path: [
        "a2b23e1f-954b-49a3-91f1-4d62d209a093"
    ],
    updatedAt: ISODate("2014-02-10T04:22:01.833Z"),
    uuid: "a2b23e1f-954b-49a3-91f1-4d62d209a093"
}
但是,当我想在先前创建的页面(主页/产品)下创建“子页面”时,会出现以下错误:

MongoError:E11000重复键错误索引:cms项目。项。$path_1 dup键:{:“a2b23e1f-954b-49a3-91f1-4d62d209a093”}

以下是我发送的数据:

{ name: 'Products',
  uuid: 'a004ee54-7e42-49bf-976c-9bb93c118038',
  path: 
   [ 'a2b23e1f-954b-49a3-91f1-4d62d209a093',
     'a004ee54-7e42-49bf-976c-9bb93c118038' ] }
我可能错过了什么,但我不知道是什么。
如果我将路径存储在字符串中而不是数组中,它工作得很好,但我发现它不那么优雅和方便。

我自己不确定所有的帆/水线部分,因为我从来没有玩过它。但由于错误,问题是数组字段上有一个唯一的索引

插入第二个文档时,另一个文档中的路径字段中已经有一个值(父项)。唯一约束不允许这样做。最确定的是,对于正在建模的对象,您不希望这样做,并且索引不能唯一

我希望您自己在假设这意味着文档中包含的数组中的唯一性的情况下设置它。如果您这样做了,那么您现在就知道要查看的位置和要更改的内容。如果这是以某种方式自动部署的,那么我将不提供帮助

将索引更改为非唯一。您可以通过mongo shell确认这一点:

use cms-project
db.item.getIndices()

祝你好运

我自己不确定所有的帆/水线部分,因为我从来没有玩过。但是错误的是,你的数组字段上有一个唯一的索引

插入第二个文档时,另一个文档中的路径字段中已经有一个值(父项)。唯一约束不允许这样做。最确定的是,对于正在建模的对象,您不希望这样做,并且索引不能唯一

我希望您自己在假设这意味着文档中包含的数组中的唯一性的情况下设置它。如果您这样做了,那么您现在就知道要查看的位置和要更改的内容。如果这是以某种方式自动部署的,那么我将不提供帮助

将索引更改为非唯一。您可以通过mongo shell确认这一点:

use cms-project
db.item.getIndices()

祝你好运

我自己不确定所有的帆/水线部分,因为我从来没有玩过。但是错误的是,你的数组字段上有一个唯一的索引

插入第二个文档时,另一个文档中的路径字段中已经有一个值(父项)。唯一约束不允许这样做。最确定的是,对于正在建模的对象,您不希望这样做,并且索引不能唯一

我希望您自己在假设这意味着文档中包含的数组中的唯一性的情况下设置它。如果您这样做了,那么您现在就知道要查看的位置和要更改的内容。如果这是以某种方式自动部署的,那么我将不提供帮助

将索引更改为非唯一。您可以通过mongo shell确认这一点:

use cms-project
db.item.getIndices()

祝你好运

我自己不确定所有的帆/水线部分,因为我从来没有玩过。但是错误的是,你的数组字段上有一个唯一的索引

插入第二个文档时,另一个文档中的路径字段中已经有一个值(父项)。唯一约束不允许这样做。最确定的是,对于正在建模的对象,您不希望这样做,并且索引不能唯一

我希望您自己在假设这意味着文档中包含的数组中的唯一性的情况下设置它。如果您这样做了,那么您现在就知道要查看的位置和要更改的内容。如果这是以某种方式自动部署的,那么我将不提供帮助

将索引更改为非唯一。您可以通过mongo shell确认这一点:

use cms-project
db.item.getIndices()

祝你好运

谢谢你的回答,它帮助我解决了我的问题!我对这个集合做了几次测试,事实上,即使我从Sails.js模型中删除了“path”属性,它仍然有一个独特的约束。谢谢你的回答,它帮助我解决了我的问题!我对这个集合做了几次测试,实际上仍然有l对“path”属性的唯一约束,即使我从Sails.js模型中删除了它。感谢你的回答,它帮助我解决了我的问题!我对这个集合做了几次测试,实际上对“path”属性的唯一约束仍然存在,即使我从Sails.js模型中删除了它。感谢你的回答,它帮助我解决了我的问题问题!我对这个集合做了几次测试,事实上,“path”属性仍然有一个唯一的约束,即使我从Sails.js模型中删除了它。