2017-07-01 5 views
1

Ich mag würde dieses Objekt Array überprüfen:SimpleSchema Validierung für Objektarray

[ 
    { 
     _id  : 'NpxZFT4TwfDvwbtKX', 
     parent: 'T4TwfDvwbtKXNpxZF', 
     order: 1 
    } 
] 

Wie kann ich das tun, da dies nicht funktioniert:

new SimpleSchema({ 
    _id : { type: SimpleSchema.RegEx.Id }, 
    parent: { type: SimpleSchema.RegEx.Id }, 
    order : { type: Number } 
}) 

Wie würde die Validierung aussehen durch mit check()?

+0

Warum funktioniert die SimpleSchema-Validierung nicht? Was ist der genaue Fehler? Versuchen Sie, das Array als Ganzes oder jedes Element im Array mit dem Schema zu validieren? – Jankapunkt

+0

Ich versuche, das komplette Array nicht jedes Element zu validieren – user3142695

+0

Aus diesem Grund lehnt das Schema Ihre Eingabe ab. Das Schema passt nur zum Schema des Inhalts mehrerer Elemente, aber weil Sie ein Array übergeben, verweigert es die Eingabe. Wo genau benutzt du es? In einer validierten Methode? Es kann eine einfache Lösung dafür geben. Können Sie bitte einen kleinen Code posten, wo Sie Ihr Array tatsächlich abgelehnt haben? – Jankapunkt

Antwort

2

Die coole Sache über validierte Methode ist, dass Sie ein separates Schema für Ihre Methode als für die Dokumente verwenden können. Dies ermöglicht Ihnen, Objekte und Arrays und alles andere an die Methode zu übergeben und Ihre Dokumente im Auftrag der Daten zu verarbeiten.

Was ist also mit dem Schema, das Sie zuvor erstellt haben? Dies wird noch verwendet! Es prüft FOR EACH Einfügen oder Aktualisieren eines Dokuments in Ihrer Sammlung, wenn das Dokument zum angegebenen Schema passt.

Codebeispiel:

import {Meteor} from 'meteor/meteor'; 
import {Mongo} from 'meteor/mongo'; 
import {ValidatedMethod} from 'meteor/mdg:validated-method'; 
import {Random} from 'meteor/random'; 

import SimpleSchema from 'simpl-schema'; 

// schema for document on collectionm level 
const documentSchema = new SimpleSchema({ 
    // id optional otherwise you can't insert new docs 
    _id: {type: SimpleSchema.RegEx.Id, optional: true}, 
    parent: {type: SimpleSchema.RegEx.Id}, 
    order: {type: Number} 
}); 

// attach schema to a new collection 
const testCollection = new Mongo.Collection("testcollection"); 
testCollection.schema = documentSchema; 
testCollection.attachSchema(documentSchema) 


// create method schema 
// see that we attach the document schema 
// as type of the items of the array 
const methodSchema = new SimpleSchema({ 
    data: {type: Array}, 
    "data.$": {type: documentSchema}, 
}); 

// insert method using the method schema 
const insertArrayMethod = new ValidatedMethod({ 
    name: "insert.array.method", 
    validate: methodSchema.validator(), 
    run({data}){ 
     const ret = []; 
     for (let input of data) { 
      const tmp = Object.assign({}, input); 
      tmp._id = testCollection.insert(input); 
      ret.push(tmp); 
     } 
     return ret; 
    }, 
}); 

// update method using the method schema 
const updateArrayMethod = new ValidatedMethod({ 
    name: "update.array.method", 
    validate: methodSchema.validator(), 
    run({data}){ 
     const ret = []; 
     for (let input of data) { 
      ret.push(testCollection.update(input._id, {$set: {parent: input.parent, order: input.order}})); 
     } 
     return ret; 
    }, 
}); 


Meteor.startup(() => { 
    const data = [ 
     {parent: Random.id(17), order: 0}, 
     {parent: Random.id(17), order: 1}, 
     {parent: Random.id(17), order: 2}, 
    ]; 
    console.log("insert data") 
    console.log(data); 

    const results = Meteor.call("insert.array.method", {data: data}); 
    console.log("insert result"); 
    console.log(results); 

    for (let element of results) { 
     element.order += 5; 
    } 
    console.log("update data"); 
    console.log(results); 

    // note thet the input variablle in the validated method has to be called data 
    const updateResult = Meteor.call("update.array.method", {data: results}); 
    console.log("update result"); 
    console.log(updateResult); 
}); 

Konsolenausgabe:

I20170701-12:21:38.302(2)? insert data   
I20170701-12:21:38.319(2)? [ { parent: 'wkh3C6NSvZqrewxLh', order: 0 }, 
I20170701-12:21:38.322(2)? { parent: 'ezfBAtZrgXgG8dANy', order: 1 }, 
I20170701-12:21:38.342(2)? { parent: 'H4eXyR6FJ9sts6Nn2', order: 2 } ] 
I20170701-12:21:38.616(2)? insert result 
I20170701-12:21:38.621(2)? [ { parent: 'wkh3C6NSvZqrewxLh', 
I20170701-12:21:38.624(2)?  order: 0, 
I20170701-12:21:38.626(2)?  _id: 'et4hCu2osH7DnbhHo' }, 
I20170701-12:21:38.633(2)? { parent: 'ezfBAtZrgXgG8dANy', 
I20170701-12:21:38.636(2)?  order: 1, 
I20170701-12:21:38.641(2)?  _id: 'ysH3NaydR6PwdTQCr' }, 
I20170701-12:21:38.656(2)? { parent: 'H4eXyR6FJ9sts6Nn2', 
I20170701-12:21:38.659(2)?  order: 2, 
I20170701-12:21:38.660(2)?  _id: 'AQExATqWhGr26FN7A' } ] 
I20170701-12:21:38.673(2)? update data 
I20170701-12:21:38.681(2)? [ { parent: 'wkh3C6NSvZqrewxLh', 
I20170701-12:21:38.683(2)?  order: 5, 
I20170701-12:21:38.684(2)?  _id: 'et4hCu2osH7DnbhHo' }, 
I20170701-12:21:38.696(2)? { parent: 'ezfBAtZrgXgG8dANy', 
I20170701-12:21:38.698(2)?  order: 6, 
I20170701-12:21:38.700(2)?  _id: 'ysH3NaydR6PwdTQCr' }, 
I20170701-12:21:38.701(2)? { parent: 'H4eXyR6FJ9sts6Nn2', 
I20170701-12:21:38.705(2)?  order: 7, 
I20170701-12:21:38.707(2)?  _id: 'AQExATqWhGr26FN7A' } ] 
I20170701-12:21:38.712(2)? update result 
I20170701-12:21:38.714(2)? [ 1, 1, 1 ] 

Zusammenfassung:

Methode-Schema - bestätigt die Eingabe für eine validierte Methode Dokument- Schema - validiert das Eingabe-/Aktualisierungsobjekt für eine Mongo-Sammlung