我目前有两个集合,分别是SchoolsContactsSchools集合已经填充了数千个数据,而Contacts是一个仍然为空的新集合。

现在,它们两个都有一个架构更改。以下是架构详细信息:

// ----------- Schools.js
module.exports = {
  attributes: {
    user: {
      model: 'users'
      // Của User đã tạo
    },

    essential: {
      type: 'string'
      // Lưu toàn bộ thông tin của essential
    },

    contacts: {
      collection: 'contacts',
      via: 'schools'
    },

    pipeline: {
        type: 'string',
        defaultTo: ""
    },

    status: {
      type: 'integer',
      defaultsTo: 1
      // 0: un-active, 1: active
    }
  }
};

// ----------- Contacts.js

module.exports = {
    attributes: {
        title: {
            type: 'string'
        },

        firstName: {
            type: 'string'
        },

        lastName: {
            type: 'string'
        },

        email: {
            type: 'string'
        },

        position: {
            type: 'string'
        },

        landlinePhone: {
            type: 'string'
        },

        mobilePhone: {
            type: 'string'
        },

        externalCompany: {
            type: 'string'
        },

        schools : {
            collection: 'schools',
            via: 'contacts',
            dominant: true
        },

        user: {
            model: 'users'
        },

        activities: {
            collection: 'activities',
            via: 'contact'
        },

        status: {
            type: 'integer',
            defaultsTo: 1
            // 0: remove, 1: active, 2: unactive
        }
    }
};


这是创建新联系人时的代码:

Contacts.create(contactData).exec(function (e1, newContact) {
    if (e1) {
      console.log("e1 ::: ", e1);
    };

    // newContact is filled with contact new data..
    console.log("Contact data has been created", newContact, schoolId);

    // Adding schools to newContact (schoolId has a value here);
    newContact.schools.add(schoolId);

    // Save
    newContact.save(function (err) { console.log('err', err) });
});


但是,当我检查数据库时,已创建contacts但没有schools属性。并且相关的schools也仍然没有contacts属性。

我尝试了以下方法;

newContact.schools.add([schoolId]);
// or --
newContact.schools.add(schoolObj);
// or --
newContact.schools.add([schoolObj]);


我试图在这两个集合之间切换dominant属性,并像执行相反的那样执行,

school.contacts.add(newContact);


我也尝试过这些解决方案,没有任何麻烦。


http://sailsjs.com/documentation/concepts/models-and-orm/associations/many-to-many
https://github.com/balderdashy/waterline-docs/issues/20
Sails.js How to insert data into a join table (Many to Many)


我在这里想念什么吗?任何建议表示赞赏。

最佳答案

您的代码很好,它将schools附加到contacts

sails console中,运行以下命令:

Contacts.find(contactId).populateAll().exec(console.log);


如果它打印联系人以及已填充的学校数组,则数据将保留在DB中。它可能在单独的集合中,而不是在MongoDB中的Contacts中。

PS:pipeline定义在defaultTo中有错字(应为defaultsTo

关于node.js - 帆将数据创建成多对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41713306/

10-12 12:21